2016-12-02 18 views
5

Bir boolean özelliğini pom.xml dosyasında tanımlandığı gibi iptal etmek istiyorum.Pom.xml'deki bir özelliği nasıl reddedebilirsiniz?

anlamı, bir özellik verilmiş ${doSomething} I <skip> değeri ${doSomething} olumsuzlaması olması gereken bir eklenti <skip> geçmesi gerekir.

${doSomething} yanlışsa, atlamak istiyorum. Eğer doğruysa o zaman atlamak istemiyorum. Herhangi bir fikir?

Açıklama: Profil etkinleştirme için bir mülkün olumsuz kullanımını kullanmaktan bahsetmiyorum. Ben sadece bir booleanın olumsuzluğunu bir eklentiye aktarmak istiyorum.

+0

doSomething ile ilgili atlamak için kullandığınız geçerli komutu paylaşırdınız. – nullpointer

+0

@nullpointer Bu bir özel eklentidir. Https: // github adresinden "$ {download.cmake}" konusuna bakın.com/cmake-maven-proje/cmake-maven-proje. Kullanıcılar bu özelliği false olarak ayarlarsa, indirme işlemlerini atlamak istiyorum, ancak eklenti aslında bu değerin negatif değerini giriş olarak alıyor ('' parametresi). – Gili

+0

Lütfen geçerli pom.xml'in eklenti bağlamı ve şu anda izlediğiniz yürütme yöntemiyle ilgili ayrıntıları ekleyin. Sağlanan bağlantıda "$ {download.cmake}" göremiyorum. – nullpointer

cevap

6

, Maven bir boolean mantığı uygulamaya sahip değil: İlk özelliğin değerini ters nerede başka özelliği bildirin. Yani bir özelliği bir eklentiye iletmek istemiyorsanız, bunu kendiniz yapmanız gerekir. Biraz sakar, ama Maven'in özellikleri olarak onun içinde tanımlanan bir BeanShell script ve ihracat değişkenleri yazmayı sağlayan build-helper-maven-plugin:bsh-property golü, kullanabilirsiniz: Sen mülkü geçersiz kılamaz

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.12</version> 
    <executions> 
    <execution> 
     <id>negate-prop</id> 
     <phase>initialize</phase> 
     <goals> 
     <goal>bsh-property</goal> 
     </goals> 
     <configuration> 
     <source>dontDoSomething = !${doSomething};</source> 
     <properties> 
      <property>dontDoSomething</property> 
     </properties> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

, ancak bir tanımlayabilir Olumsuzluğun sonucunu içeren yeni bir; Yukarıdaki örnekte, dontDoSomething. Bu initialize fazında çalıştırılır, böylece eklentilerin geri kalanı bunu ${dontDoSomething} standardı ile bir parametre olarak kullanabilir.

doSomething mevcut değilse, dontDoSomething için varsayılan bir değere sahip olacak şekilde geliştirilebilir.

<source> 
    value = project.getProperties().getProperty("doSomething"); 
    dontDoSomething = value == null ? false : !Boolean.parseBoolean(value); 
</source> 

BeanShell, Java'ya çok benzeyen ve mevcut Java yöntemlerini kullanabileceğiniz bir komut dosyası dilidir. Yukarıda, "doSomething" numaralı mülk, projenin özelliklerinden alınmıştır (project, mevcut Maven projesi ile değerlendirme zamanında eklenti tarafından enjekte edilir); Tanımlanmadı, false döndürüyoruz, aksi takdirde değeri reddediyoruz.


doSomething özel bir sistem özelliği ise, aynı zamanda, (ab) mümkün olabilir profil etkinleştirme özelliği kullanmak ve 2 profil vardır: biri bir özellik ile aktive ikinci true olmak ve false başka ayar ve tersini yapıyor profile: doSomething örneğin <properties> etiketinde belirlenen bir Maven özelliği ise

<profiles> 
    <profile> 
    <id>pro-1</id> 
    <activation> 
     <property> 
     <name>doSomething</name> 
     <value>!false</value> 
     </property> 
    </activation> 
    <properties> 
     <dontDoSomething>false</dontDoSomething> 
    </properties> 
    </profile> 
    <profile> 
    <id>pro-2</id> 
    <activation> 
     <property> 
     <name>doSomething</name> 
     <value>false</value> 
     </property> 
    </activation> 
    <properties> 
     <dontDoSomething>true</dontDoSomething> 
    </properties> 
    </profile> 
</profiles> 

Bu işe yaramaz. mvn -DdoSomething=true|false ile bir sistem özelliği olarak geçirilmesi gerekecek. Karşılık gelen profil, dontDoSomething özelliğini tersine tanımlayacak olan sistem özelliğinin değerine göre etkinleştirilecektir. Özellik tanımlanmadıysa etkin olacak, dontDoSomething ayarı false varsayılan değerine ayarlanacaktır. Bunların hepsi çirkin olsa da ...

+1

Yanıtı, boole değerini true veya false olarak ayarlamak için iki profil kullanmanın daha eksiksiz bir örneğini içerecek şekilde güncelleştirebilir misiniz? – Gili

+1

@Gili Evet, daha yeni düzenledim. Sadece doSomething'in sadece bir Maven özelliği değil, bir sistem özelliği olması durumunda çalışacağını unutmayın. – Tunaki

+0

Sorun değil (ama bunu işaretlediğiniz için teşekkürler!) – Gili

1

Kesin yanıtı bilmiyorum ama bence özellikler değerini tersine çevirmek için aşağıdakileri deneyebilirsiniz (http://maven.apache.org/guides/introduction/introduction-to-profiles.html).

dışında profil etkinleştirme gelen
<property> 
    <name>dontDoSomething</name> 
    <value>!${doSomething}</value> 
</property> 
+0

Bu işe yaramıyor çünkü biz burada profil aktivasyonu hakkında konuşmuyoruz. Bir eklentiye geçen bir özelliği tanımlamaktan bahsediyoruz. – Gili

+0

Bu NEDEN değil ama NASIL. Bir mülkün değerini nasıl tersine çevirirsiniz? – actc

+0

Ah. Bunun için üzgünüm :) Şimdi deneyeceğim. – Gili

İlgili konular