Maven derlemesi sırasında alt modülü atla


160

Belirli ortamlarda bir alt modülü atlayabilmemiz gerekir.

Söz konusu modül, entegrasyon testleri içerir ve çalışması yarım saat sürer. Bu nedenle, CI sunucusunu oluştururken dahil etmek istiyoruz, ancak geliştiriciler yerel olarak oluşturulduğunda (ve testler çalıştırıldığında), bu modülü atlamak istiyoruz.

Bunu bir profil ayarıyla yapmanın bir yolu var mı? Biraz googling yaptım ve buradaki diğer sorulara / cevaplara baktım ve iyi bir çözüm bulamadım.

Bir seçenek, bu alt modülü pom.xmltamamen üst öğeden kaldırmak ve sadece bu modülü oluşturmak için CI sunucumuzda başka bir proje eklemek olduğunu varsayalım .

Öneriler?


Neden Maven Way olmasın? Bu benim için kesinlikle geçerli bir iddia.
MaDa

Hmm. Şimdi insanların buna karşı çıktıkları yerleri bulamıyorum ... Bu yüzden orijinal sorumu "Maven Yolu" gibi görünmediği iddiamı kaldırmak için güncelledim.
denishaskin

Yanıtlar:


149

Elbette, bu profiller kullanılarak yapılabilir. Ana pom.xml dosyasında aşağıdakine benzer bir şey yapabilirsiniz.

  ...
   <modules>
      <module>module1</module>
      <module>module2</module>  
      ...
  </modules>
  ...
  <profiles>
     <profile>
       <id>ci</id>
          <modules>
            <module>module1</module>
            <module>module2</module>
            ...
            <module>module-integration-test</module>
          </modules> 
      </profile>
  </profiles>
 ...

CI'nizde maven'i ciprofille çalıştırırsınız , yanimvn -P ci clean install


4
Mükemmel cevap! Maven belgelerinden neden bu kadar çok sorun yaşadığımı bilmiyorum. Yapacağım bir öneri, entegrasyon testlerinin varsayılan olarak çalıştırılmasını tercih ettiğim activeByDefaultiçin, bu profile ekledim ve sonra skip-integration-testsbunları atlayabilmek için başka bir boş profil (ör. ) Eklemek zorunda kaldım .
denishaskin

7
tüm paylaşılan şeyleri çoğaltmadan yapmanın bir yolu var mı?
JonnyRaa

7
Dikkat edin, maven-release-eklentisini kullanırsanız, bir profil anahtarının arkasında gizli olan alt modüllerin sürüm numarasını güncellemediği anlaşılır. Projenizin geri kalanına farklı sürüm numaralarına sahip alt modüller olabilir ...
Ardesco

8
Ne yazık ki, profili kullanarak pom'un ana <modülleri> bölümünde daha önce belirtilen bir modülü hariç tutamazsınız. JIRA issue.apache.org/jira/browse/MNG-5230 (ve tüm pom yapısı) biraz daha dikkatli bir düşünce ile çok daha iyi bir şekilde uygulanabilirdi.
Ed Randall

2
bu çözüm gerçekten işe yarıyor mu? En azından işe yarayamıyorum. @EdRandall
Gerros

232

Maven sürüm 3.2.1 kullanabilirsiniz, bu özelliği eklendi -planahtarı ( kısayol için --projectslistenin) !veya -( kaynak belli submodules dışlamak için).

mvn -pl '!submodule-to-exclude' install
mvn -pl -submodule-to-exclude install

Karakter bash dikkatli olun! özel bir karakter, bu yüzden ya tek tırnak (benim gibi) ya da ters eğik çizgi karakteri ile kaçmak zorunda.

Birden fazla modülü hariç tutmak için sözdizimi, içerme ile aynıdır

mvn -pl '!submodule1,!submodule2' install
mvn -pl -submodule1,-submodule2 install

Windows EDIT tek tırnak gibi görünmüyor, ama bash gerekli; Windows'ta çift tırnak kullanın (teşekkürler @awilkinson)

mvn -pl "!submodule1,!submodule2" install

27
Önemli: İç içe geçmiş bir alt modülü hariç tutmak istiyorsanız, nitelikli sürümü kullanmanız gerekirmvn -pl !com.acme:nestedmodule1
Leonard Brünings

3
-Pl seçeneğinin artifactId'den önce '[groupId]:' gerekir, bu yüzden mvn -pl kullanmalıyız!: Dışlamak için alt modül 'install
Honsen

4
mvn -pl '!path/to/submodule/directory'GroupId ve artifactId kullanmadan da kullanabilirsiniz . Cevabım aşağıdaki gibi olursa submodule1vesubmodule2 geçerli dizinde .
Alexandre DuBreuil

Ayrıca kullanırsanız -pl de mvn install, büyük olasılıkla için kullanmak gerekecektir mvn deployyanı
majikman

39

-plKomut satırı argümanını belirterek hangi reaktör projelerinin inşa edileceğine karar vermek mümkündür :

$ mvn --help
[...]
 -pl,--projects <arg>                   Build specified reactor projects
                                        instead of all projects
[...]

Aşağıdaki biçimlerden birinde virgülle ayrılmış parametre listesini kabul eder:

  • POM içeren klasörün göreli yolu
  • [groupId]:artifactId

Böylece, aşağıdaki yapı göz önüne alındığında:

project-root [com.mycorp:parent]
  |
  + --- server [com.mycorp:server]
  |       |
  |       + --- orm [com.mycorp.server:orm]
  |
  + --- client [com.mycorp:client]

Aşağıdaki komut satırını belirleyebilirsiniz:

mvn -pl .,server,:client,com.mycorp.server:orm clean install

her şeyi inşa etmek. Yalnızca istediğiniz modülleri oluşturmak için listedeki öğeleri kaldırın.


DÜZENLEME: Blackbuild'in işaret ettiği gibi, Maven 3.2.1'den itibaren yeni bir -elbayrağınız var itibaren, projeleri reaktörden hariç tutan var -pl:


2
Teşekkürler. Bu benim için iyi çalıştı. Ayrıca belirttiğiniz modüllerin gerektirdiği projeleri oluşturmak için "-am" (AKA "--al-make") ekleyebileceğinizi de unutmayın.
gaz

1
Harika! mvn install -pl .Ana pompayı bina modülleri olmadan sadece yerel repoya kurmak için kullandım .
Marcin

Ayrıca, jira.codehaus.org/browse/MNG-5230 adresine bir göz atın . Artık projeleri reaktörden hariç tutabilirsiniz.
Mart'ta blackbuild

1
Codehaus.org'un kapatılmasından bu yana MNG-5230 bağlantısı: issue.apache.org/jira/browse/MNG-5230
Ed Randall

Ne yazık ki, geçici olarak çalışmaz, yani, top / mod1 / mod2 varsa ve üstten oluşturursam, -pl '! Mod2' bir hata oluşturur.
zakmck

4

Çok modüllü projeler kavramı, bir projenin birbirine bağlı bölümlerinin ihtiyaçlarına hizmet etmek için vardır. Böyle bir müşteri, söz konusu EJB'lere veya veri erişim rutinlerine bağlı olan hizmetlere bağlıdır. Sen olabilir bu şekilde sizin sürekli entegrasyon (CI) testler grup. CI testlerinin uygulama mantığı değişiklikleri ile kilit adımda olması gerektiğini söyleyerek mantıklı olacağım.

Projenizin şu şekilde yapılandırıldığını varsayalım:

project-root
  |
  + --- ci
  |
  + --- client
  |
  + --- server

project-root/pom.xmltanımlar modülleri

<modules>
  <module>ci</module>
  <module>client</module>
  <module>server</module>
</modules>

ci/pom.xmlTanımlar profilleri gibi:

... 
<profiles>
  <profile>
    <id>default</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>true</skip>
       </configuration>
     </plugin>
  </profile>
  <profile>
    <id>CI</id>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>false</skip>
       </configuration>
     </plugin>
  </profile>
</profiles>

Bu, adlandırılan profilin CIaktif olduğu durumlar dışında, bu modülde Maven atlama testlerine neden olacaktır . CI sunucunuzdan yürütmesi istenmelidir mvn clean package -P CI. Maven web sitesinde profil oluşturma mekanizmasının ayrıntılı bir açıklaması bulunmaktadır .


2

şimdi (1.1.1 versiyonundan) çukurda bir 'atlama' bayrağı var.

Böylece aşağıdakileri yapabilirsiniz:

    <profile>
        <id>pit</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.pitest</groupId>
                    <artifactId>pitest-maven</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

ve çukur atlayacak

[INFO] --- pitest-maven: 1.1.3: mutationCoverage (default-cli) @ module-selenium --- [INFO] Atlama projesi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.