2010-04-28 22 views
20

Aşağıdaki proje yapısına sahip bir java uygulaması var:Özellikler dosyası jar dosyasından nasıl hariç tutulur?

myProject 
    | 
    |----src 
    |  | 
    |  |--main 
    |  | 
    |  |--resources 
    |   | 
    |   |--userConfig.properties 
    |   |--log4j.properties 
    | 
    |---target 

Projemi oluşturmak için Maven kullanıyorum. Aşağıdaki gibi jar dosyası oluşturmak için maven komutunu kullanıyorum:

mvn package -DMaven.test.skip=true 

userConfig.properties dosyasını JAR dosyasından hariç tutmak istiyorum böylece pom.xml'ımı aşağıdaki gibi güncelledim:

<excludes> 
    <exclude>**/userConfig.properties</exclude> 
</excludes> 

Ancak, Derlenmiş kodun bulunduğu hedef klasör. Ve uygulama userConfig.properties dosyasını bulamadığı için çalışmaz.

Birisi bana yardım edebilir mi?

+0

Sorunuz hiç mantıklı değil. Bir dosyayı hariç tutmak istediğinizi söylüyorsunuz, ancak dosyanın hariç tutulduğu için uygulamanızın çalışmadığını söylüyorsunuz. Öyleyse neden en başta dışarıda bırakmak istedin? –

+0

Yay çerçevesini kullanıyor musunuz? –

+0

Evet, Chris Spring Framework kullanıyorum. –

cevap

9

this'a bir bakış atınız.

<project> 
    ... 
    <build> 
    <plugins> 
     ... 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.3</version> 
     <configuration> 
      <excludes> 
      <exclude>**/userConfig.properties</exclude> 
      </excludes> 
     </configuration> 
     </plugin> 
     ... 
    </plugins> 
    </build> 
    ... 
</project> 
1

ben muhtemelen Hariç o yapılandırılmış yere bağlı olarak doğru bir şekilde yaptığını sanıyorsun (gerçekten dosyaları sizin kavanozda ne jar tf ile kontrol edin). Büyük olasılıkla, bir sorunla karşılaşıyorsunuz çünkü dosya sınıf yolunuzda değil ve dolayısıyla uygulamanız bunu bulamıyor. İçindeki kaynak dosyasıyla dizini sınıf yoluna eklemeyi deneyin.

Bazı varsayılan değerler koymak ve sınıf yoluna bulaşmamasını önlemek için uygulamanın önceden tanımlanmış bir yoldan yapılandırmasında okumasına izin verebilirsiniz.

38

Bu senaryoda da karşılaştım. Temel olarak, /src/main/resources içinde olduğu gibi kolayca erişilebilen bazı userConfig.properties dosyasını kullanarak kodunuzu Eclipse'den yerel olarak çalıştırmak isteyebilirsiniz. Ek olarak, kullanıcının uygulamayı JAR'ı kırmadan yapılandırmasına izin veren harici bir userConfig.properties ile derlenmiş bir yürütülebilir JAR sağlamak istiyorsunuz. aşağıdaki gibi

Benim uygulamasıdır: mvn clean install olacaktır çalıştıran:

  • belirtilen mainClass
  • ile çalıştırılabilir JAR oluşturmak
  • kopya proje bağımlılıkları bir lib klasöre JAR src/main/resources bulunan tüm .properties dosyaları hariç projenizin köprüsündenumaralı .properties dosyalarını biriçine kopyalayın Proje kökünüzdekiklasörü. Bu adımın JAR kullanıcılarınız için isteğe bağlı bir kolaylık olduğunu unutmayın. Bu dosyayı conf dizininde açıkça oluşturmanızı isteyebilirsiniz. Bu conf dizini, manifest aracılığıyla çalışma zamanı sınıf yolunuza etkili bir şekilde eklenir.
  • ihtiyacın olanı verecektir sizin POM yapılandırmasında birbirleri ile bağlantılı olarak bu Maven eklentileri kullanma çalıştırılabilir JAR

bu siteye erişim sağlayan beyannamesine bu conf klasör eklemek. Bu çözümün “en iyi uygulamaları” na gelince; Emin değilim.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>copy-dependencies</id> 
     <phase>prepare-package</phase> 
     <goals> 
     <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
     <outputDirectory>${project.build.directory}/lib</outputDirectory> 
     <overWriteReleases>false</overWriteReleases> 
     <overWriteSnapshots>false</overWriteSnapshots> 
     <overWriteIfNewer>true</overWriteIfNewer> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

şöyle maven-kavanoz-eklentisi Kullanılması:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.3</version> 
    <configuration> 
    <excludes> 
     <exclude>**/*.properties</exclude> 
    </excludes>      
    <archive> 
     <manifest> 
     <addClasspath>true</addClasspath> 
     <classpathPrefix>lib/</classpathPrefix> 
     <mainClass>package.path.to.your.main.class.MainClass</mainClass> 
     </manifest> 
     <manifestEntries> 
     <Class-Path>conf/</Class-Path> 
     </manifestEntries> 
    </archive> 
    </configuration> 
</plugin> 

maven-kaynaklar-eklentisi kullanarak aşağıdaki gibi

maven-bağımlılık-eklentisi kullanma aşağıdaki gibi:

Bu proje kurulumunu kullanarak, bir yapılandırma kullanarak Eclipse'de çalışabilir ve kullanıcılara, özelliklerin birbirini etkilemeden yapılandırılacak bir özellik dosyası sağlayabilir.

+1

Çözümünüz için teşekkür ederiz! Hayatımı kurtardın!!! –

+0

Düzgün olarak ayarlanmış sınıf yoluna sahip yürütülebilir jar fikrini beğeniyorum. Belki de [Maven Assembly Plugin] 'i (http://maven.apache.org/plugins/maven-assembly-plugin/) de kontrol edebilirsiniz - bunu, sahip olduğunuzla aynı yapıya sahip (örneğin istisnasız) jar çalıştırılamaz .. ((;;) - böylece aynı, kaynak ve bağımlılık eklentileri meclis ile değiştirerek elde edebilirsiniz ... – Betlista

+0

THIS.IS.A.LIFESAVER. – jmcg

İlgili konular