2011-06-10 47 views
64

我在Mac 10.6.6上使用Maven 3.0.3。我有一個JAR項目,當我運行命令「MVN全新安裝:安裝」,我得到的錯誤,Maven:此項目的包裝未將文件分配到構建工件

這是什麼意思?如何解決呢?以下是我的pom.xml。讓我知道其他信息會有幫助,我會編輯這篇文章。謝謝, - 戴夫

<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> 

回答

104

我不知道這是不是答案或沒有,但它可能會導致你在正確的方向...

命令install:install實際上是對maven-install-plugin的目標。這與install maven生命週期階段不同。

Maven lifecycle phases是構建中的某些插件可以綁定到的步驟。當您調用單個生命週期階段時,可能會執行來自不同插件的許多不同目標。

這是什麼歸結爲是命令

mvn clean install 

不同於...

mvn clean install:install 

前者將運行在每個週期中的所有目標,導致對和包括安裝(如編譯,打包,測試等)。後者甚至不會編譯或打包你的代碼,它只會運行那一個目標。這是有道理的,看着例外;它談論:

StarTeamCollisionUtil:這個項目的打包文件沒有指派到構建神器

嘗試前和您的錯誤可能只是走開!

4

我有同樣的問題。 對於我的錯誤消息不完整。但在我的情況下,我已經添加了具有源代碼的代碼jar。通過將這些代碼的pom.xml:

<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> 

因此,在部署階段,我執行源:產生罐子來源jar目標。部署結束BUILD BUILD SUCCESS

+0

它爲我工作。 – 2017-05-18 09:55:12

3

您必須清除目標文件,如jar和其他文件 在C:驅動您的文件夾.m2請參閱它安裝的位置並刪除.jar文件,Snaphot文件和刪除目標文件然後清理應用程序,您發現它將運行

+0

以及部分解決方案。 – 2017-04-06 21:02:03

39

TL; DR要解決此問題,請先調用封裝插件,例如爲jar包裝使用maven-jar-plugin,如下:

mvn jar:jar install:install 

或者

mvn jar:jar deploy:deploy 

如果你確實需要部署。

疑難雜症,如果你有不同的包裝(耳朵/戰爭/ JAR/ZIP)–更糟的是,錯誤的文物將被安裝/部署的多模塊項目這種做法是行不通的!在這種情況下,使用reactor選項來構建可部署模塊(例如war)。


說明

在你真的想直接運行install:installdeploy:deploy目標(即從maven-deploy-plugindeploy目標,而不是Maven的deployphase)某些情況下,你將結束在煩人的The packaging for this project did not assign a file to the build artifact

一個典型的例子是在不同的步驟要執行關於不同方面/護理CI作業(詹金斯,竹工作,如):

  • 第一步將是mvn clean install,執行測試和測試覆蓋率
  • 第二步是基於質量配置文件的Sonarqube分析,例如mvn sonar:sonar加上更多選項
  • 然後,只有在成功執行測試並通過質量門之後,才需要將您最終的項目工件部署到您的Maven企業存儲庫,但您不希望重新運行mvn deploy,因爲它會再次執行先前的階段(以及編譯,測試等),並且您希望您的構建有效,但仍然快速

是的,你可以加快這最後一步,至少跳過測試(編譯和執行,通過-Dmaven.test.skip=true)或特定配置文件播放(跳過儘可能多的插件,可能的話),但它是非常容易和清晰然後簡單地運行mvn deploy:deploy

但它會失敗,上面的錯誤,因爲還指定by the plugin FAQ

在包裝階段全部聚集,並放置在上下文中。通過這種機制,Maven可以確保maven-install-pluginmaven-deploy-plugin正在複製/上傳相同的一組文件。所以當你只執行deploy:deploy,那麼上下文中就沒有文件了,沒有什麼可以部署的。

確實,deploy:deploy需要一些運行時信息放置在前一階段(或之前的插件/目標執行)的構建上下文中。

它也報道了潛在的錯誤:MDEPLOY-158:部署:部署並不僅僅部署神器工作到Maven遠程回購

但隨後拒絕爲沒有問題的。

maven-deploy-plugindeployAtEnd配置選項將不利於無論是在某些情況下,因爲我們中間作業步驟來執行:

是否每個項目都應該在自己的部署相或在年底部署的多模塊構建。如果設置爲true且構建失敗,則不會部署任何反應器項目。 (實驗)

那麼,如何解決它呢?
只需運行在這樣一個類似的第三/最後一個步驟如下:

mvn jar:jar deploy:deploy 

maven-jar-plugin不會再創建任何廣口瓶作爲構建的一部分,由於其forceCreation選項默認設置爲false

要求jar插件構建新的JAR,即使沒有任何內容顯示已經更改。默認情況下,這個插件會查看輸出jar是否存在,輸入沒有改變。如果這些條件成立,插件會跳過創建jar。

但它會很好地填充我們的構建上下文,並使deploy:deploy高興。不要跳過測試,不要添加配置文件。正是你需要的:速度。


附加說明:如果您使用的是build-helper-maven-pluginbuildnumber-maven-plugin或其他任何類似的插件後,生成的元數據上(對於清單文件,例如項目)使用的maven-jar-plugin,你很可能已經執行掛鉤validate階段,並且您仍然希望在jar:jar構建步驟期間擁有它們(並保持快速執行)。在這種情況下,幾乎是無害的開銷是調用validatephase如下:

mvn validate jar:jar deploy:deploy 

還有一個額外注:如果你還沒有jar但是,比如說,war包裝,使用war:war之前安裝/部署,而不是。

Gotcha如上所述,檢查多模塊項目中的行爲。

+3

非常好的解釋:) – Raja 2016-07-23 17:39:56

+4

跑到這個確切的場景。精彩的寫作 - 應該在部署插件FAQ中,而不是簡單的「你不能這樣做」的解釋。 – markdsievers 2016-09-22 20:29:48

0

這個回覆是一個非常古老的問題,以幫助其他人面對這個問題。

我面對這個,而我是使用IntelliJ IDEA IDE我Java項目工作失敗的錯誤。

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 

這種失敗的情況發生,當我選擇install:installPlugins - install下,與下圖紅色箭頭所指。

Choose Wrong Selection

一旦如上圖所示,這個問題我去運行選定installLifecycle下,我的Maven的安裝成功編譯版本。

相關問題