Estoy trabajando en una base de código con un independiente pom.xml.

Th intención es incorporar un hijo proyecto llamado «la colmena» en un subdirectorio de los padres de uno. Nota: el hive/pom.xml ya existe y funciona bien por sí mismo.

Así en el padre de la pom.xml he añadido:

   <modules>
      <module>hive</module>
   </modules>

El problema es que, básicamente, pierde la capacidad de crear el despliegue tarro del proyecto principal.

 [email protected]:/shared/git2/etl$ mvn package assembly:single
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error building POM (may not be this project's POM).


Project ID: com.myco.etl:etl
POM Location: /shared/git2/etl/pom.xml
Validation Messages:

    [0]  Packaging 'jar' is invalid. Aggregator projects require 'pom' as packaging.


Reason: Failed to validate POM for project com.myco.etl:etl at /shared/git2/etl/pom.xml


[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.reactor.MavenExecutionException: Failed to validate POM for project com.myco.etl:etl at /shared/git2/etl/pom.xml
    at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:404)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:272)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
    at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Parece que maven me quiere crear un padre pom que básicamente no hace nada excepto definir la dependencia de los módulos.

Bueno, yo puedo crear un nuevo pom.xml. Pero lo que no puedo hacer es empujar a la existente en los archivos de proyecto en un nuevo subdirectorio.

Hay una manera de evitar esto? E. g. la definición de un submódulo que vive en el mismo nivel (no subdir)? O alguna otra manera de trabajar con la existente estructura de directorios?

gracias

De seguimiento: Basado en datos de entrada que un módulo puede ser simplemente un archivo en el directorio local, me
creado otro pom que llama a la original. El original fue cambiado el nombre a pommod.xml y el nuevo que se muestra a continuación se llama 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.etl</groupId>
    <artifactId>etl</artifactId>
    <name> ETL Helpers</name>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
        <modules>
  <module>appminer</module>
  <module>pommod.xml</module>
   </modules>

Corrí «mvn compile paquete» Pero aún así consigue el mismo error:

Project ID: com.myco:app_miner
POM Location: /shared/git2/etl/mycopom.xml
Validation Messages:

[0]  Packaging 'jar' is invalid. Aggregator projects require 'pom' as packaging.


Reason: Failed to validate POM for project com.myco:app_miner at /shared/git2/etl/myco/pom.xml
InformationsquelleAutor javadba | 2013-04-23

3 Comentarios

  1. 11

    Para responder a la pregunta del título de este post:

    Sí, Maven puede incluir a los padres en el módulo y en el mismo nivel de directorio. Siento que tengo que explicar que un padre puede tener hijos y módulos. Los niños y los módulos no son la misma cosa:

    • De la relación del niño se define a través de parent en el niño POM. Si su padre está en la repo, que es la que. Si su padre o su madre en el sistema de archivos, usted tiene que jugar con parent.relativePath para que sea encontrado en la misma carpeta
    • Módulo se define a través de modules en el padre POM. Módulo contiene normalmente un nombre de la carpeta y el archivo POM es implícita (por ejemplo, <module>mod</module> es equivalente a <module>mod/pom.xml</module>). Por lo tanto, un módulo en la misma carpeta sería <module>pom1.xml</module> o algo. (Me llamó el módulo de POM de archivo pom1.xml en este ejemplo, suponiendo que pom.xml está ya tomada por los padres — vea qué lío nos estamos poniendo nosotros mismos)

    Me deja rápidamente dado un ejemplo donde los niños y los módulos son claramente diferentes: puede tener Pompones para generar la aplicación de cada uno de sus equipos. Cada uno de su equipo puede tener webapps y backend de aplicaciones. Usted puede tener los padres POMs para webapps y backend de aplicaciones. Por lo que algunos backend de la aplicación sería un hijo de el POM para el backend de aplicaciones, mientras que ser un módulo del equipo que está trabajando en ello.


    Una cosa que me llama la atención es que estamos hablando de los envases. Un padre POM (embalaje pom) por lo general es sólo una gota de metadatos y nada más. Si usted quiere ser algo más que usted todavía puede adjuntar plugin ejecuciones fases del ciclo de vida. Usted puede incluso ejecutar embalaje plugins y adjuntar los resultados para el artefacto.


    Yo no entendía por qué hive no puede ser un niño (carpeta propia, propia POM en que carpeta), bien a un nivel más bajo de los padres, cómo Maven había destinado a ser. Pero me sonó como que usted podría tener algún proyecto, en cualquier otro directorio, ser dependiente de la jar artefacto en hive, y convertirlo en lo que la asamblea desea. Así hive sería una dependencia de la asamblea proyecto (digamos hive-assembly). Que es llegar a mi siguiente punto…


    El hecho de que Maven no en el hecho de que usted tiene los padres y el niño en la misma carpeta no es en absoluto un buen argumento para hacerlo. Es sólo una cuestión de tiempo para que alguna parte de Maven o uno de sus plugins se va a trabajar en contra de usted. Maven es «convención sobre configuración«, en vivo por que!

    • He utilizado tu sugerencia sobre la necesidad de un módulo de ser sólo un pomXX.xml archivo. Aún tienen problemas y se han actualizado el post original.
    • Tal vez compartir un poco más de POM detalle de los proyectos en los que participa. Que se está construyendo, ¿cómo no?
    • Parece necesario tener dos diferentes pom; en uno de pom blanco como principal y el otro para el archivo jar. Se trabaja entonces – a pesar de v inconveniente.
    • ¿Qué te falta si se declara el padre como pom? Lo que no funciona? Estaba pensando que a través del ciclo de vida de la unión de plugins usted debe ser capaz de lograr lo que desea. (executions.execution.phase etc.)
  2. 1

    Favor de referirse a la simple ejemplos dados en maven sitio:
    http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation

    Que explica claramente cuando usted quiere tener relación padre-hijo o el paquete de módulos de relación o de los padres-los módulos de relación(combinación de ambas).

    Ejemplo con la Primavera de Inicio de los proyectos:

    Tengo todo mi sprint de arranque de proyectos con primavera de arranque motor de arranque del proyecto como
    de los padres, así que aquí estoy teniendo relación padre-hijo.

    Para embalaje, aparte tengo pom archivo en el directorio raíz( o
    ruta de acceso relativa) que define todos los módulos en el mismo. Pero no hay ninguna
    referencia de mi proyecto principal en mi módulos. así que aquí estoy usando como
    un paquete del módulo de relación.

    Pero recientemente ha cambiado la configuración de mi para uso de los padres-los módulos de relación, creó un padre pom archivo y se refirió
    la primavera de arranque motor de arranque proyectos como el de mi padre dentro de ella. finalmente se utiliza la casa de mis padres
    las referencias en todos los de mi hijo módulos. Así de esta manera la estoy usando como
    la combinación de ambos modelos.

Dejar respuesta

Please enter your comment!
Please enter your name here