2012-09-06 20 views
15

Maven requiere un proyecto principal a tenerCómo generar tarro para el proyecto Maven padres

<packaging>pom</packaging>

cláusula en pom.xml de los padres. Cuando se instala un proyecto de este tipo, solo se genera un pom-file en el repositorio de maven. Jar-file no se genera, no importa si el proyecto principal tiene algún código Java. Eso me obliga a tener proyectos principales vacíos, lo cual es excesivo. Lógicamente, algunas de mis bibliotecas podrían ser padres al mismo tiempo.

¿Hay alguna manera de generar archivos pom y jar para un proyecto principal sin eliminar/agregar la cláusula packaging entre las instalaciones?

Respuesta

10

Utilice Maven Jar Plugin y Maven Build Helper. Ejemplo POM:

<?xml version="1.0" encoding="UTF-8"?> 
<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>test</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0</version> 

    <packaging>pom</packaging> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.7</version> 
     <executions> 
      <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
       <artifact> 
        <file>test-${project.version}</file> 
        <type>jar</type> 
       </artifact> 
       </artifacts> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
      <execution> 
      <id>default</id> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <phase>package</phase> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Maven construir los resultados:

mvn install 
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building test 1.0 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- build-helper-maven-plugin:1.7:attach-artifact (attach-artifacts) @ test --- 
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default) @ test --- 
[WARNING] JAR will be empty - no content was marked for inclusion! 
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ test --- 
[INFO] Installing /home/username/projects/test/pom.xml to /home/username/.m2/repository/test/test/1.0/test-1.0.pom 
[INFO] Installing /home/username/projects/test/test-1.0 to /home/username/.m2/repository/test/test/1.0/test-1.0.jar 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.805s 
[INFO] Finished at: Thu Sep 06 13:33:20 EDT 2012 
[INFO] Final Memory: 4M/119M 
[INFO] ------------------------------------------------------------------------ 

Una nota sobre las prácticas de Maven:

módulos de padres son típicamente donde se definen las dependencias y plugins utilizados en común por parte de todos los módulos de niño . Rara vez tiene salida propia. Probablemente desee tener un submódulo de "distribución" que agregue todos los demás artefactos de su módulo, en lugar de intentar hacerlo en el módulo principal.

+2

Gracias, noahz, por su solución. Quiero generar archivos jar para un proyecto principal para evitar proyectos adicionales vacíos en mi área de trabajo de Eclipse y así simplificar las relaciones del proyecto. Soy nuevo en maven, así que podría estar equivocado. ¿Recomiendas usar proyectos padres vacíos? Sospecho que su solución entrará en conflicto con los proyectos para niños, que tienen sus propios complementos para crear tarros. – Kallisto

+2

Está perfectamente bien tener un proyecto principal que esté "vacío" (no genera artefactos) ya que solo sirve para definir configuraciones de propiedad, versiones de dependencia, complementos, etc. utilizados por proyectos secundarios. Por cierto, si usa mi solución, acepte la respuesta haciendo clic en la marca de verificación. – noahlz

+0

Muchas gracias por su respuesta y las explicaciones. Voy a seguir tu recomendación para usar proyectos vacíos como padres. – Kallisto

Cuestiones relacionadas