2010-11-05 21 views
17

Dağıtım eklentim için parolaları ~/.m2/settings.xml dosyasında tanımladığım özellikler aracılığıyla (pom.xml dahil olmak üzere herhangi bir yerde olabilir) sunuculara tanımlarım. Uyumluluk testleri için aynı özellikleri kullanmak istiyorum. Bunu yapmanın bir yolu var mı?Maven'dan (settings.xml dosyasında tanımlanmış parolalar) Spring container'ma özellik ekleyebilir miyim?

Değilse, Maven ve TestNG arasındaki özellikleri paylaşmak için uygun bir yol var mı?

Farklı sürekli ana bilgisayarlara (geliştirme, sınama, aşamalandırma ve üretim) işaret ederek, kodun değiştirilmeden farklı sürekli tümleştirme sunucularında çalışabilen güzel bir test paketi yazmak istiyorum.

Ben settings.xml uzak hizmetine kimlik bilgilerini tanımlayan ediyorum: Benim biriminde özelliklerini başvurmak edebilmek istiyorum

<properties> 
<my.host>http://my.company.com</my.host> 
<my.username>my-un</my.username> 
<my.password>my-pw</my.password> 
</properties> 

/entegrasyon testleri (src/test/kaynaklar) kullanarak:

<?xml version="1.0" encoding="UTF-8"?> 
<beans.... 
    <bean class="java.lang.String" id="un"> 
     <constructor-arg value="${my.username}"/> 
    </bean> 
    <bean class="java.lang.String" id="pw"> 
     <constructor-arg value="${my.password}"/> 
    </bean> 
</beans> 

Bunu yapmak için herhangi bir seçenek var mı? Bunu daha önce deneyen var mı? Testlerimde izin gerektiren bir çok REST testi yazıyorum.

Teşekkürler!

cevap

1

maven, projenizi belirli bir profille oluşturduğunda Maven'i belirli bir değeri xml dosyanızın içine alabilir. Örneğin, maven pompasında bir test dosyası hazırlayacaksınız ve bu profille oluşturduğunuzda, kavanozunuzdaki xml dosyası istenen özelliği içerecektir. Örnek için this'a bakın.

31

Elbette. Maven resource filtering gitmek için yoldur. İşte

örnek bir yapılandırma var ( *-context.xml eşleşen dosyalar filtre edilecektir diğerleri will not):

<build> 
    <resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>**/*-context.xml</include> 
      </includes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>false</filtering> 
      <excludes> 
       <exclude>**/*-context.xml</exclude> 
      </excludes> 
     </resource> 
    </resources> 
</build> 

farklı bir yaklaşım kullanarak Bahar dosya Properties Maven Pluginwrite all project properties to a file ve referans olduğunu kullanmak olacaktır the PropertyPlaceholderConfigurer mechanism.

Maven Yapılandırma:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0-alpha-2</version> 
      <executions> 
       <execution> 
        <phase>generate-test-resources</phase> 
        <goals> 
         <goal>write-project-properties</goal> 
        </goals> 
        <configuration> 
         <outputFile>${project.build.testOutputDirectory}/mavenproject.properties</outputFile> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Bahar yapılandırma:

<context:property-placeholder location="classpath:mavenproject.properties"/> 
+0

Mükemmel yanıt +1 –

+0

+1 Dokümanları okuduğumda tam olarak aradığım şey tam olarak. Başlangıçta "filtrelemenin" başka bir şey olduğunu düşünmeden ihmal edildi. – marklai

+1

İş akışlarınıza bağlı olarak, bu özelliklerin, özellikle de parolaların, yapılarınızda, örn. CI ortamında. –

5

Eh, @seanizer doğru yolda olduğunu, ama zaten maven içinde özelliklerini ayarlayabilirsiniz beri bu basitleştirilmiş olabilir. Onları pompanıza ve Spring konfigürasyonunuza yerleştirin, yapmanız gereken tek şey onlara erişmektir, bu yüzden yapılandırmanızı bu şekilde değiştirmeniz yeterli olacaktır.

<beans.... 
    <context:property-placeholder /> 

    <bean class="java.lang.String" id="un"> 
     <constructor-arg value="${my.username}"/> 
    </bean> 
    <bean class="java.lang.String" id="pw"> 
     <constructor-arg value="${my.password}"/> 
    </bean> 
</beans> 

İlgilendiğiniz özellikler artık maven tarafından sistem özellikleri olarak ayarlandığından konum gerekli değildir. PropertyPlaceholderConfigurer, bu özel durumda gerekli olmayan bir dosyada tanımlanmış olanlarla birlikte çalışacaktır. Lütfen dikkat, bağlamı için numaralı şemayı eklemeniz gerekecek.

Geçerli konumunuzdan onları taşıyabiliyordum, ancak bu genel bir ayar olduğu için, pompanız projeye özel olduğundan, ait olduğu yer olduğunu düşünüyorum.

+1

Bu da (+1) çalışır, ancak sadece testler çatallanmamışsa. –

İlgili konular