2014-10-31 16 views
9

"java -jar file.jar" ile çalıştırdığınız anlamına gelen maven ile yürütülebilir bir jar dosyası yapıyorum.Maven: dış kaynak ekle

Kullanıcı tanımlı özelliklerine (yalnızca anahtarları/değerleri içeren bir dosyaya) güvenmek istiyorum, geliştirme aşaması sırasında "user.properties" dosyasını maven/src/main/resources/klasörüne koyuyordum.

Benim mülküm dosyası ile yüklenen

: Ben maven eklentileri ile birçok şeyi denedik

- execution_folder 
    |_ file.jar 
    |_ config 
     |_ user.properties 

:

final Properties p = new Properties(); 
final InputStream resource = IOParametres.class.getResourceAsStream("/user.properties"); 
p.load(resource); 

Şimdi, JAR dışında bu dosyayı tutmak ve böyle bir şey yapmak istiyorum maven-jar-plugin, maven-surefire-plugin ve maven-sources-plugin gibi ama çalışamıyorum ...

Yardımlarınız için şimdiden teşekkür ederiz!

+0

User.properties sadece kavanozun yanında tutmak ve çalışma zamanında okumak istediğiniz ayrı bir metin dosyası mı? Çünkü eğer öyleyse ...Muhtemelen sadece başka bir dış dosya – Deltharis

+0

yapacağı gibi davranmalıyım Evet, bu sadece ayrı bir dosyadır, fakat buradaki 1- Kavanoz ve yapılandırma dosyalarının kullanıcı tarafından nereye konacağını bilmiyorum 2 - I Bağımlılıklar tarafından kullanılan diğer kaynak dosyalarına sahip olun (DB bağlantısı ve diğerleri) – GournaySylvain

+0

Dışardaki özellikler dosyasına isterseniz, classpath'i executon_folder/config/'klasörünüze yönlendirecek şekilde ayarlamanız gerekir, aksi takdirde' kullanıcınıza 'erişemezsiniz. properties'. Yani basit bir 'java -jar file.jar' çalışmaz. – khmarbaise

cevap

13

.

Önce Sınıfyoluna yapılandırma klasör eklemek:

<build> 
<plugins> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.3.1</version> 
    <configuration> 
     <archive> 
      <manifestEntries> 
       <Class-Path>config/</Class-Path> 
      </manifestEntries> 
     </archive> 
    </configuration> 
</plugin> 
</plugins> 
</build> 

önce gibi kaynakları gibi yükleyin: Eğer repo senin örneğin kaynak dosyaları tutmak istiyorsanız

final InputStream resource = IOParametres.class.getResourceAsStream("/user.properties"); 
p.load(resource); 

Ve ve Onları yapınızdan kaldırın:

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <excludes> 
       <exclude>user.properties</exclude> 
       <exclude>conf/hibernate.cfg.xml</exclude> 
      </excludes> 
     </resource> 
    </resources> 
</build> 

Kavanoz dosyası yanında, bir yapılandırma klasörü tutuyorum. İhtiyacım olan tüm kaynak dosyaları.

sonucudur:

    getResourceAsStream kullanılarak yüklenebilir
  • user.properties (ben tartışmayacağım, ama ... bu iyi değil bulmak belirli kaynaklara dayanarak
  • diğer kütüphaneler) Kaynaklarını herhangi bir sorun olmadan yükleyebilirler.

Yardımlarınız için teşekkürler, umarım bir gün birilerine yardım edebilir!

+0

Aynı şeyi yapmak istiyorum ama önce jar dosyası yanında configs dizinini almam gerekiyor. Bunu nasıl başarabilirim? – SachiDangalla

+0

Burada sorunuzu gerçekten anlamıyorum ... Benim senaryoda, yapılandırma dosyaları jar dosyasının içinde saklanmadı (pom.xml dosyasında hariç tutuldu). Yapılandırma dosyalarınızın oluşturulması ve kopyalanması, dağıtım tarafındaki – GournaySylvain

+0

Evet'de yönetilmelidir. Elle kopyalayıp yapıştırmadan jar'in dışındaki config klasörünü almanın bir yolunu istiyorum. Nasıl hallettin? – SachiDangalla

1

Yorumda da belirtildiği gibi - user.properties dosyasını sadece kavanozunuzun yanında yer alan bir metin dosyası olarak kullanmak istersiniz. Eğer durum buysa, onu kullanmak oldukça basittir - jar dosyalarınızı içeren dizin çalışma zamanı sırasında kontrol edildiğinde geçerli dizindir. Bu, ihtiyacınız olan tek şey, proje sınıf yolunu kullanmaya çalışmadan

properties.load(new FileInputStream("config/user.properties")); 

anlamına gelir.

Ve yapılacak başka bir şey varsa, yalnızca el ile yaptığınız işten kaçınmak için özelliklerinizi kaynak dizininden hedefe kopyalayarak yapar. Yani maven-antrun-eklenti tarafından elde edilebilir: Ben sadece maven yapılandırmayı kullanarak gerekeni bulundu

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>run</goal> 
        </goals> 
        <configuration> 
         <tasks> 
          <mkdir dir="${project.build.directory}" /> 
          <copy file="${basedir}/src/main/resources/user.properties" tofile="${project.build.directory}/config/user.properties" /> 
         </tasks> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
+0

Çözümünüzü anlıyorum ve bazı dosyalarım için kullanabilirim, ancak kaynaklarda Ayrıca bir "hibernate.cfg.xml" ve aradığım bir kitaplık tarafından kullanılan diğer bazı dosyalarım var. Ve bu kütüphane sadece kaynak dosyaları arıyor (_getResourceAsStream_ çağrısı ile) – GournaySylvain

İlgili konular