2009-01-21 20 views
8

Java projemden bağımsız yürütücüler oluşturmak için Maven Application Assembler eklentisini kullanıyorum. Uygulama, Spring dosyaları dahil olmak üzere yapılandırma dosyalarında okur. Uygulama Birleştirici eklentisi, uygulamanın sınıf yoluna bir etc/dizin eklemek için bir seçeneğe (varsayılan olarak etkinleştirilmiş) sahiptir, ancak eklenti, yapılandırma dosyamı bu dizine kopyalamak için ne yapmalıyım?Maven projesi için uygulama yapılandırma dosyalarını nereye yerleştirmeliyim?

Veya daha genel olarak, Maven'in içinde arşive yerleştirilmemesi gereken uygulama yapılandırma dosyaları için koşer konumu nerede?

cevap

1

Seni doğru anladığımı bilmiyorum. Ancak geçmişte yaptığım konfigürasyon dosyalarını kopyalamak için ihtiyacım olan bir proje için Maven AntRun plugin kullanıyorsunuz. Yaptığım şey, işlem kaynakları aşamasında eklentiyi yürütmek ve Ant kopyalama görevini kullanarak yapılandırma dosyamı belirtilen dizine kopyalamak. Assembler eklentisi paket aşamasında çalışır, böylece doğru yere koyarsanız yapılandırma dosyalarınızı almalıdır. Umarım bu soruya biraz cevap verir.

+0

Evet Bunu elle yapmanın en kolay yolu olacağını düşünüyorum. Appassembler eklentisinin sizin için bunu yapıp yapamayacağını merak ediyorum, yani config dosyalarını src/etc'den alıp $ {appname}/etc'ye kopyalayın. – lindelof

6
Ayrıca kaynak filtreleme kullanabilirsiniz

:

application.properties

application.properties: gibi

... 
<build> 
... 
<resources> 
     <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
     </resource> 
    </resources> 
... 
</build> 
... 

src/main/kaynaklar altında bir dosya olun: filtrelemeyi http://maven.apache.org/guides/getting-started/index.html#How_do_I_filter_resource_files

dönüş

configprop.1=${param1} 
configprop.2=${param2} 

Sonra bir profil kurun ve belki de bir dev veya üretim yapısı olup olmadığına bağlı olarak farklı özellikler belirleyen settings.xml içinde bazı özellikler ayarlayın. bkz: http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Ben farklı özelliklere sahip set bu yapı sunucu, dev veya bir üretim dağıtım ise bağlı olarak

mvn -Denv = dev || mvn -Denv = dev-build || mvn -Denv = üretim

Maven bağlantısının oldukça iyi bir açıklaması vardır.

3

Maven montaj eklentisini deneyebilirsiniz. Ben appassembler eklentisi ile birlikte kullanılır.

Yapılandırma dizininiz için istediğiniz ismi 'etc' istemiyorsanız, appassembler'ı yapılandırın. Montaj eklentisi, her şeyi kendi çıkış dizininde toplar, bu yüzden derleyici ve dosyadaki dizinleri dizinden dizin dizinine kopyalamak için derleme eklentisini yapıyorum, daha sonra yapılandırma dosyalarını kopyaladım (benimki src/main/config dizinindedir)) beklenen yapılandırma dir. Bunun içinde bazı duplikasyon var, çünkü appassembler çıktılarını kopyalıyorsunuz, ama bu beni gerçekten rahatsız etmiyordu.

Montaj eklentisini çalıştırdıktan sonra sahip olduğunuz şey, bin, repo ve config dir öğelerinin tümü derleme çıkış dizini altındaki eş dizinlerdir. Tercih ederseniz farklı bir yapıya sahip olacak şekilde yapılandırabilirsiniz, sadece benim appassembler yapısını yansıtmak istedim.

Buradaki en önemli şey, derleme düzenleyicileri, appassembler ile nasıl yapılacağını göremediğim, yürütülebilir dosyalarınızı değiştirecek şekilde de yapılandırabilmenizdir. Ve, eğer appassembler bağlarsanız: montaj ve montaj: paket aşamasına tek goller, yapmanız gereken tek şey 'mvn paket', ve her şeyi toplar.Uygulama Assembler Eklentisi isteğe bağlı parametreler configurationSourceDirectory ve copyConfigurationDirectory sürümü 1.1 bu yana, son zamanlarda orada bu geldiniz millet için

3

. Aşağıda ayıklamak pom.xml örnek bunları bulabilirsiniz: Ben senin soru, ya da en azından çok benzer bir soru olduğunu düşünüyorum bir cevap arayan olmuştu here

0

<configuration> 
    <!-- Set the target configuration directory to be used in the bin scripts --> 
    <configurationDirectory>conf</configurationDirectory> 
    <!-- Copy the contents from "/src/main/config" to the target 
     configuration directory in the assembled application --> 
    <copyConfigurationDirectory>true</copyConfigurationDirectory> 
    <!-- Include the target configuration directory in the beginning of 
     the classpath declaration in the bin scripts --> 
    <includeConfigurationDirectoryInClasspath> 
    true 
    </includeConfigurationDirectoryInClasspath> 
... 
</configuration> 

fazla bilgidir. Maven, maven-resources-plugin kullanarak kaynakları için dizinleri belirtmenize izin verir. Kaynak dizinlerimden birinde birkaç yapılandırma dosyası var. Bahsettiğiniz etc/dizinindeki (CLASSPATH'ımın başlangıcında) bu dosyaların kopyalarını koyarak, bu dosyaların çalışma zamanında kullanmak için değerleri değiştirebileceğimi fark ettim. Ardından, varsayılan olarak kaynak dizinimden her şeyin kopyaları ile oluşturulan bu etc/dizinine sahip olmak istedim. Maven-sources-plugin'den gelen copy-resources hedefi bunu yapmama izin verdi. Örnekler> Sol kenar çubuğundaki Kaynaklar Kopyalama Kaynaklarından (bu yazıdaki 2 bağlantıyla sınırlıyım) bu özellik benim için ne yaptı:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.6</version> 
     <executions> 
      <execution> 
      <id>copy-resources</id> 
      <!-- here the phase you need --> 
      <phase>validate</phase> 
      <goals> 
       <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${basedir}/target/extra-resources</outputDirectory> 
       <resources>   
       <resource> 
        <directory>src/non-packaged-resources</directory> 
        <filtering>true</filtering> 
       </resource> 
       </resources>    
      </configuration>    
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    ... 
    </build> 
    ... 
</project> 
İlgili konular