2011-06-10 208 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的安装成功编译版本。

相关问题