2011-06-10 15 views
64

Estoy usando Maven 3.0.3 en Mac 10.6.6. Tengo un proyecto JAR y cuando funciono con el comando "mvn instalación limpia: Instalar", estoy recibiendo el error,Maven: El paquete de este proyecto no asignó un archivo al artefacto de construcción

¿qué significa esto y cómo puedo solucionarlo? A continuación está mi pom.xml. Déjame saber qué otra información sería útil y editaré esta publicación. Gracias, - de 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> 

Respuesta

104

No sé si esta es la respuesta o no, pero que podría conducir en la dirección correcta ...

El comando install:install es en realidad un objetivo en el maven-install-plugin. Esto es diferente a la fase del ciclo de vida del maven install.

Maven lifecycle phases son pasos en una compilación a la que ciertos complementos se pueden unir. Muchos objetivos diferentes de diferentes complementos se pueden ejecutar cuando se invoca una única fase del ciclo de vida.

Lo que esto se reduce a la orden ...

mvn clean install 

es diferente de ...

mvn clean install:install 

El primero se ejecutará todos los objetivos en cada ciclo que conduce hasta e incluyendo la instalar (como compilación, paquete, prueba, etc.). Este último ni siquiera compilará ni empaquetará su código, solo ejecutará ese único objetivo. Esto tiene sentido, mirando la excepción; se habla de:

StarTeamCollisionUtil: El embalaje de este proyecto no asignó un archivo a la acumulación de artefactos

juzgar al ex y su error sólo podría desaparecer!

4

Tengo el mismo problema. El mensaje de error para mí no está completo. Pero en mi caso, he agregado generación jar con las fuentes. Al colocar este código en 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> 

Así, en fase de implementación ejecuto fuente: meta frasco que produce frasco con fuentes. E implementar termina con BUILD SUCCESS

+0

me funciona. –

3

debe borrar el archivo de destino como en jar y otros En C: maneje su carpeta en .m2 vea la ubicación donde instala y elimine el archivo .jar, archivo de instantáneas y elimine el destino archivos luego limpie la aplicación que encontró que se ejecutará

+0

Bueno, una solución parcial. –

39

TL; DR Para solucionar este problema, invoque el complemento de empaquetado antes, por ejemplo para utilizar envases jarmaven-jar-plugin, de la siguiente manera:

mvn jar:jar install:install 

O

mvn jar:jar deploy:deploy 

Si realmente necesaria para desplegar.

Gotcha Este enfoque no funcionará si tiene proyecto de varios módulos con diferentes envases (oreja/guerra/jar/zip) – lo que es peor, artefactos equivocadas serán instalados/desplegados! En tal caso, use las opciones del reactor para construir solo el módulo desplegable (por ejemplo, el war).


Explicación

En algunos casos, en realidad se desea ejecutar directamente un objetivo install:install o deploy:deploy (es decir, desde el maven-deploy-plugin, el objetivo deploy, no el Maven deployphase) y que acabaría arriba en el molesto The packaging for this project did not assign a file to the build artifact.

Un ejemplo clásico es un trabajo CI (un trabajo de Jenkins o bambú, por ejemplo), donde en diferentes pasos que desea ejecutar/cuidado acerca de diferentes aspectos:

  • Un primer paso sería un mvn clean install, la realización de pruebas y prueba de cobertura
  • Un segundo paso sería un análisis de Sonarqube basado en un perfil de calidad, por ejemplo mvn sonar:sonar más otras opciones
  • Luego, y solo después de la ejecución exitosa de pruebas y la puerta de calidad aprobada, desea desplegar en su repositorio de Maven los artefactos finales del proyecto, pero no desea volver a ejecutar mvn deploy, porque lo haría de nuevo ejecuta fases previas (y compila, prueba, etc.) y quieres que tu compilación sea efectiva, pero rápido.

Sí, se puede acelerar este último paso, al menos, omitiendo pruebas (compilación y la ejecución, a través de -Dmaven.test.skip=true) o jugar con un perfil particular (para saltar tantos complementos como sea posible), pero es mucho más fácil y clara simplemente ejecute mvn deploy:deploy y luego.

Pero sería un error con el error anterior, debido a que también se especifica by the plugin FAQ:

Durante la fase de envasado todos reunidos y colocados en su contexto. Con este mecanismo, Maven puede garantizar que el maven-install-plugin y el maven-deploy-plugin estén copiando/cargando el mismo conjunto de archivos. Por lo tanto, cuando solo ejecuta deploy:deploy, no hay archivos en el contexto y no hay nada que implementar.

De hecho, el deploy:deploy necesita cierta información de tiempo de ejecución colocada en el contexto de compilación por fases anteriores (o ejecuciones de plugins/goles anteriores).

También se ha reportado como un error potencial: MDEPLOY-158: Desplegar: Implementar no funciona para único artefacto Implementación en Maven repo remoto

Pero entonces rechazado como no es un problema.

La opción de configuración de la deployAtEndmaven-deploy-plugin no ayudará ni en ciertos escenarios porque tenemos pasos de trabajo intermedios para ejecutar:

sea cada proyecto debe ser desplegado durante su fase de despliegue o al final de la construcción de los multímbolos. Si se establece en true y la construcción falla, ninguno de los proyectos del reactor se implementa. (experimental)

Entonces, ¿cómo solucionarlo?
simplemente ejecute lo siguiente en una tercera/último paso tan similar:

mvn jar:jar deploy:deploy 

El maven-jar-plugin no va a volver a crear cualquier frasco como parte de su construcción, gracias a su opción forceCreation establecido en false por defecto:

Requerir que el plugin jar cree un nuevo JAR incluso si ninguno de los contenidos parece haber cambiado. Por defecto, este complemento busca ver si el jar de salida existe y las entradas no han cambiado. Si estas condiciones son verdaderas, el complemento omite la creación del contenedor.

Pero poblará muy bien el contexto de compilación para nosotros y hará feliz a deploy:deploy. Sin pruebas para saltar, sin perfiles para agregar. Justo lo que necesitas: velocidad.


Nota adicional: si está utilizando el build-helper-maven-plugin, buildnumber-maven-plugin o cualquier otro complemento similar a generar meta-datos más tarde usado por los maven-jar-plugin (por ejemplo, las entradas para el archivo de manifiesto), que más probablemente han ejecuciones vinculado a la fase validate y aún desea tenerlos durante el paso de compilación jar:jar (y aún así mantener una ejecución rápida). En este caso la sobrecarga casi inofensivo es invocar la validatephase de la siguiente manera:

mvn validate jar:jar deploy:deploy 

Sin embargo, otra nota adicional: si no lo ha jar pero, por ejemplo, war embalaje, utiliza war:war antes de instalar/desplegar vez .

Gotcha como se indicó anteriormente, compruebe el comportamiento en proyectos de varios módulos.

+3

Muy buena explicación :) – Raja

+4

Se metió en este escenario exacto. Escritura fantástica: debe estar en las preguntas más frecuentes sobre el complemento de implementación, en lugar de su explicación bastante escueta de "no se puede hacer eso". – markdsievers

0

Esta respuesta es una pregunta muy antigua para ayudar a otros a enfrentar este problema.

que se enfrentan a este error falló mientras estuviera trabajando en mi proyecto Java usando IntelliJ IDEA IDE.

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 

esto no sucede, cuando decido install:install bajo Plugins - install, como se ha señalado con la flecha roja en la imagen de abajo.

Choose Wrong Selection

Una vez que corro el seleccionado install bajo Lifecycle como se ilustra arriba, el problema ha ido, y mi experto instalo compilar construir con éxito.

Cuestiones relacionadas