Maven: Bu projenin ambalajı, yapı yapısına bir dosya atamadı


113

Mac 10.6.6'da Maven 3.0.3 kullanıyorum. Bir JAR projem var ve "mvn clean install: install" komutunu çalıştırdığımda, hatayı alıyorum,

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.3.1:install (default-cli) on project StarTeamCollisionUtil: The packaging for this project did not assign a file to the build artifact -> [Help 1]

Bu ne anlama geliyor ve bunu nasıl düzeltebilirim? Aşağıda pom.xml dosyam var. Başka hangi bilgilerin yardımcı olacağını bana bildirin, bu yazıyı düzenleyeceğim. Teşekkürler - Dave

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myco.starteam.util</groupId>
<artifactId>StarTeamCollisionUtil</artifactId>
<packaging>jar</packaging>
<name>StarTeam Collision Util</name>
<description>
    The StarTeam Collision Utility provides developers and release engineers alike the ability to
    compare files attached to a set of CRs to see if conflicts exist in the change set.
</description>
<version>1.0-SNAPSHOT</version>
<url>http://cm-build.myco.com:8080/hudson/view/Tools/job/StarTeamCollisionUtil - TRUNK/</url>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
    <repository>
        <id>myco-sonatype-nexus-snapshots</id>
        <name>MyCo Sonatype-Nexus Snapshots</name>
        <url>http://sonatype.myco.com/nexus/content/repositories/snapshots/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>starteam</groupId>
        <artifactId>starteam</artifactId>
        <version>1.1.0</version>
        <type>jar</type>
        <scope>system</scope>
        <systemPath>${basedir}/lib/starteam110.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant</artifactId>
        <version>1.8.1</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.1</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.8.1</version>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.0-beta-3</version>
            <configuration>
                <reportPlugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-report-plugin</artifactId>
                        <version>2.5</version>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>2.7</version>
                        <configuration>
                            <linksource>true</linksource>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jxr-plugin</artifactId>
                        <version>2.2</version>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>versions-maven-plugin</artifactId>
                        <version>1.2</version>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-project-info-reports-plugin</artifactId>
                        <version>2.3.1</version>
                        <reportSets>
                            <reportSet>
                                <reports>
                                    <report>index</report>
                                    <report>dependencies</report>
                                    <report>dependency-management</report>
                                    <report>cim</report>
                                    <report>issue-tracking</report>
                                    <report>license</report>
                                    <report>scm</report>
                                </reports>
                            </reportSet>
                        </reportSets>
                    </plugin>
                </reportPlugins>
            </configuration>
        </plugin>
    </plugins>
</build>
<distributionManagement>
    <repository>
        <id>sonatype-nexus</id>
        <url>http://sonatype.myco.com/nexus/content/repositories/snapshots/</url>
    </repository>
</distributionManagement>
<scm>
    <url>https://starteam.cmass.myco.com/BorlandStarTeam/BorlandStarTeam.jsp</url>
</scm>
<issueManagement>
    <system>StarTeam</system>
    <url>https://starteam.cmass.myco.com/BorlandStarTeam/BorlandStarTeam.jsp</url>
</issueManagement>
<ciManagement>
    <system>Hudson</system>
    <url>http://cm-build.myco.com:8080/hudson/</url>
</ciManagement>
</project>

Yanıtlar:


169

Cevap bu mu bilmiyorum ama sizi doğru yöne götürebilir ...

Komut install:installaslında maven-install-eklentisinin hedefidir . Bu, installmaven yaşam döngüsü aşamasından farklıdır .

Maven yaşam döngüsü aşamaları , belirli eklentilerin kendilerini bağlayabileceği bir yapının adımlarıdır. Tek bir yaşam döngüsü aşaması başlattığınızda, farklı eklentilerden birçok farklı hedef yürütülebilir.

İşin özü, emirdir ...

mvn clean install

şundan farklıdır ...

mvn clean install:install

İlki, kuruluma kadar (derleme, paket, test vb.) Başlayan her döngüdeki tüm hedefleri çalıştıracaktır. İkincisi, kodunuzu derlemeyecek veya paketlemeyecek, sadece tek bir hedefi çalıştıracaktır. Bu, istisnaya bakıldığında mantıklı geliyor; şeyden bahsediyor:

StarTeamCollisionUtil: Bu projenin ambalajı, yapı yapısına bir dosya atamadı

İlkini deneyin ve hatanız ortadan kalkabilir!


Bamboo üzerinden çalışıyorum, ancak mvn'nin yüklediği hiçbir şey görmüyorum: herhangi bir yere yapılandırmada yükleyin
Pra_A

96

TL; DR Bu sorunu gidermek için, örneğin jarambalaj kullanımı için maven-jar-plugin, daha önce aşağıdaki gibi paketleme eklentisini çağırın :

mvn jar:jar install:install

Veya

mvn jar:jar deploy:deploy 

Gerçekten konuşlandırmanız gerekiyorsa.

Yakaladım Bu yaklaşım, farklı ambalajlara (kulak / savaş / kavanoz / zip) sahip çoklu modül projeniz varsa işe yaramayacaktır - daha da kötüsü, yanlış eserler yüklenecek / dağıtılacaktır! Böyle bir durumda, reaktör seçeneklerini yalnızca konuşlandırılabilir modülü (örneğin war) oluşturmak için kullanın .


açıklama

Bazı durumlarda aslında doğrudan çalıştırmak için bir istemek install:installya deploy:deployhedef (olduğunu, gelen maven-deploy-plugin, deployamaç değil, Maven deploy faz ) ile can sıkıcı içinde sona ereceğini The packaging for this project did not assign a file to the build artifact.

Klasik bir örnek, farklı adımlarda farklı yönleri yürütmek / önemsemek istediğiniz bir CI işidir (örneğin bir Jenkins veya Bamboo işi):

  • İlk adım mvn clean install, testlerin gerçekleştirilmesi ve test kapsamı olacaktır.
  • İkinci bir adım, kalite profiline dayalı bir Sonarqube analizi olabilir, örneğin, mvn sonar:sonarartı diğer seçenekler
  • Daha sonra, ancak başarılı testlerin yürütülmesi ve kalite geçidi geçildikten sonra, Maven kurumsal deponuza nihai proje eserlerini dağıtmak istersiniz, ancak yeniden çalıştırmak istemezsiniz mvn deployçünkü bu, önceki aşamaları yeniden yürütür (ve derleme, test etme) , vb.) ve yapınızın etkili ama hızlı olmasını istiyorsunuz .

Evet, bu son adımı en azından testleri atlayarak (derleme ve yürütme -Dmaven.test.skip=true) hızlandırabilir veya belirli bir profille oynayabilirsiniz (mümkün olduğunca çok eklentiyi atlamak için), ancak o mvn deploy:deployzaman basitçe çalıştırmak çok daha kolay ve açıktır .

Ancak yukarıdaki hatayla başarısız olur, çünkü eklenti SSS bölümünde de belirtildiği gibi :

Paketleme aşamasında hepsi bir araya toplandı ve bağlam içinde yerleştirildi. Bu mekanizma ile Maven sağlayabilirsiniz maven-install-pluginve maven-deploy-pluginkopyalama / dosyaların aynı seti yükleme. Dolayısıyla, yalnızca çalıştırdığınızda deploy:deploy, içeriğe hiçbir dosya yerleştirilmez ve dağıtılacak hiçbir şey yoktur.

Aslında, deploy:deployyapı bağlamına önceki aşamalar (veya önceki eklentiler / hedefler yürütmeleri) tarafından yerleştirilen bazı çalışma zamanı bilgilerine ihtiyaç vardır.

Ayrıca olası bir hata olarak bildirildi MDEPLOY-158:: deploy: deploy yalnızca yapıyı Maven Remote deposuna dağıtmak için çalışmaz

Ama sonra sorun olmadığı için reddedildi.

deployAtEndYapılandırma seçeneği maven-deploy-pluginbiz yürütmek için ara iş adımları çünkü belirli senaryolarda ne yardımcı olmayacaktır:

Her projenin kendi dağıtım aşamasında mı yoksa çok modüllü yapının sonunda mı konuşlandırılacağı. Olarak ayarlanırsa trueve yapı başarısız olursa, reaktör projelerinin hiçbiri konuşlandırılmaz. (deneysel)

Peki nasıl düzeltilir?
Aşağıdakileri benzer bir üçüncü / son adımda çalıştırın:

mvn jar:jar deploy:deploy

maven-jar-pluginYapınızda bir parçası olarak herhangi kavanoz yeniden oluşturmaz, onun sayesinde forceCreationseçenek kümesine falsevarsayılan olarak:

İçeriklerin hiçbiri değişmemiş gibi görünse bile jar eklentisinin yeni bir JAR oluşturmasını isteyin. Varsayılan olarak, bu eklenti çıktı kavanozunun var olup olmadığını ve girişlerin değişip değişmediğini kontrol eder. Bu koşullar doğruysa, eklenti kavanozun oluşturulmasını atlar.

Ama bizim için yapı bağlamını güzel bir şekilde dolduracak ve deploy:deploymutlu edecek. Atlanacak test yok, eklenecek profil yok. Tam ihtiyacınız olan şey: hız.


Ek not: kullanıyorsanız build-helper-maven-plugin, buildnumber-maven-pluginkullandığı daha sonra meta verileri oluşturmak için herhangi bir diğer benzeri eklentisi veya maven-jar-plugin(Manifest dosyası için örneğin kayıt), büyük olasılıkla bağlı idamları sahip validatefaz ve hala sırasında bunları istiyorum jar:jaryapı adım (henüz ve hızlı bir yürütme tutmak). Bu durumda neredeyse zararsız ek yük, validate aşamayı aşağıdaki gibi çağırmaktır :

mvn validate jar:jar deploy:deploy

Yine bir başka ek not: Paketlemeniz yoksa jar, bunun yerine kurmadan / dağıtmadan önce kullanın.warwar:war

Yakaladım gibi çoklu modül projelerde onay davranışı, yukarıda işaret etti.


8
Tam bu senaryoya rastladım. Harika bir yazı - oldukça kısa "bunu yapamazsınız" açıklaması yerine dağıtım eklentisi SSS bölümünde yer almalıdır.
markdsievers

Kavanoz kavanozunun her şeye rağmen yararlı olabileceğini kim düşünebilirdi;)
wearego

Çok modüllü projeler için çözümüme bakın: stackoverflow.com/a/57824874/318174
Adam Gent

bu çözüm çoklu modül projem için iyi çalışıyor @AdamGent
karakays

Mükemmel açıklama. Tam olarak benim Jenkins sunucumla senaryomu açıkladı.
wimnat

14

Bu yanıt, bu sorunla karşı karşıya kalan başkalarına yardımcı olmak için çok eski bir soru üzerinedir.

IDE Javakullanarak projem üzerinde çalışırken bu başarısız hatayla karşılaşıyorum IntelliJ IDEA.

Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-cli) on project getpassword: The packaging for this project did not assign a file to the build artifact

Ben seçtiğinizde bu, olur başarısız install:installaltında Plugins - installaşağıdaki resimde kırmızı okla işaret olarak.

Yanlış Seçim Seçin

Ben çalıştırmak Seçildikten sonra installaltında Lifecyclekonu gitmiş, yukarıda gösterildiği gibi, ve benim maven başarıyla derleme oluşturma yükleyin.


6

Bende de aynı sorun var Benim için hata mesajı tamamlanmadı. Ama benim durumumda, kaynaklarla birlikte nesil kavanozu ekledim. Bu kodu pom.xml içine yerleştirerek:

<build> 
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.1.2</version>
                <executions>
                    <execution>
                        <phase>deploy</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

Bu yüzden konuşlandırma aşamasında, kaynaklarla jar üreten source: jar hedefini yürütün. Ve BUILD SUCCESS ile son dağıtım


2

jar ve diğerleri gibi hedef dosyayı temizlemelisiniz C: klasörünüzü .m2'de sürün .jar dosyasını, Snaphot dosyasını yüklediği ve sildiği konumu görün ve hedef dosyaları silin, ardından bulduğunuz uygulamayı temizleyin.


Peki kısmi bir çözüm.
Jasper Lankhorst

2

Bu hata, maven-install-eklenti sürümü 3.0.0-M1 (veya benzeri) kullanılırken ortaya çıkıyor

Yukarıda daha önce belirtildiği gibi ve ayrıca burada aşağıdaki eklenti sürümü çalışır:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.5.2</version>
    </plugin>

1

@ A_Di-Matteo yanıtı çoklu modül olmayanlar için işe yararken, çoklu modüller için bir çözümüm var.

Çözüm, her eklenti yapılandırmasını geçersiz kılmaktır, böylece faza bağlanır. none jar / war / ear eklentisi ve tabii ki dağıtım eklentisi dışında kılmaktır. Tek bir modülünüz olsa bile, temel testlerim bunun performans açısından biraz daha hızlı (bilmediğim nedenlerle) olduğunu gösteriyor.

Bu nedenle, işin püf noktası, yalnızca dağıtmak istediğinizde etkinleştirilen yukarıdakileri yapan bir profil oluşturmaktır.

Aşağıda, gölge eklentisini kullanan projelerimden birinden bir örnek var ve bu nedenle üzerine yazmamak için jar eklentisini yeniden geçersiz kılmak zorunda kaldım:

    <profile>
      <id>deploy</id>
      <activation>
        <property>
          <name>buildStep</name>
          <value>deploy</value>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <executions>
              <execution>
                <id>default-compile</id>
                <phase>none</phase>
              </execution>
              <execution>
                <id>default-testCompile</id>
                <phase>none</phase>
              </execution>
              <execution>
                <id>test-compile</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
              <execution>
                <id>default-test</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <executions>
              <execution>
                <id>default-install</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>default-resources</id>
                <phase>none</phase>
              </execution>
              <execution>
                <id>default-testResources</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
              <execution>
                <id>default</id>
                <phase>none</phase>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
              <execution>
                <id>default-jar</id>
                <configuration>
                  <forceCreation>false</forceCreation>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

Şimdi çalıştırırsam mvn deploy -Pdeploy, yalnızca kavanozu çalıştıracak ve eklentileri dağıtacak.

Hangi eklentileri geçersiz kılmanız gerektiğini nasıl anlayabilirsiniz, dağıtımı çalıştırmak ve hangi eklentilerin çalıştığını görmek için günlüğe bakmaktır. idEklentinin adından sonra parantez olan eklenti yapılandırmasını takip ettiğinizden emin olun .


0

Aynı sorunu yaşadım ancak başlangıçta mvn kurulumunu gerçekleştirdim ( yükleme değil : daha önce belirtildiği gibi yükleme ).

Çözüm şunları içermektir:

 <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.5.2</version>
 </plugin>

Eklenti yönetimi bölümüne.

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.