Pregunta

I Googled esto y parece que nadie tiene una respuesta, sin embargo, parece como una cosa tan elemental que debería ser posible.

Tengo la siguiente estructura del proyecto:

parent
   ---sub-project1
   ---sub-project2

necesidades sub-Project2 tengan sub-Project1 como dependencia.

Así que tengo esto en pom del sub-proyecto 2:

 <dependencies>
    <dependency>
         <artifactId>sub-project1</artifactId>
        <groupId>mygroup</groupId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

....

Cuando hago esto, Maven intenta dowload el archivo de sub-project1.jar, que no existe, ya que no está listo para el repositorio todavía.

He intentado poner un <scope>import</scope> en la dependencia, pero que no funcionó bien -. Mismo resultado

Entonces, ¿qué tengo que hacer para llegar a Maven vistazo a sub-proyecto 1 en la construcción de sub-proyecto 2?

Editar Éstos son algunos fragmentos del pom:

Padres:

<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/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <prerequisites>
      <maven>2.0.9</maven>
   </prerequisites>
   <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>
   </modules>
 ....

sub-Project1:

<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">
  <parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>sub-project1</artifactId>
....

sub-proyecto2:

<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">
  <parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

   <artifactId>sub-project1</artifactId>

    <dependencies>
     ....
       <dependency>
          <artifactId>sub-project2</artifactId>
          <groupId>mygroup</groupId>
          <version>1.0-SNAPSHOT</version>
          <scope>import</scope>
      </dependency>
  </dependencies>

El error que estoy consiguiendo cuando llegué mvn clean install en la matriz es:

[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure

Con una gran cantidad de clases / paquete no encontró errores

¿Fue útil?

Solución

Se debe tener un pom principal al nivel de los padres, en la que se mostrará una lista de los módulos de su proyecto.

  <modules>
    <module>sub-project1</module>
    <module>sub-project2</module>>
  </modules>

En cada subproyecto que tiene que hacer referencia a su padre:

<parent>
    <artifactId>parent</artifactId>
    <groupId>mygroup</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

y especifica las dependencias entre el proyecto tal como lo hizo. Creo que te has perdido algunos de los pasos que he descrito.

Edición: se debe emitir su mvn instalación limpia en el nivel primario

.

Otros consejos

  

Cuando hago esto, Maven intenta dowload el archivo de sub-project1.jar, que no existe, ya que no está listo para el repositorio todavía.

Ese es el comportamiento normal, Maven resuelva las dependencias a través del repositorio local por lo que necesita install sub-proyecto 1 primero. En realidad, la forma común para hacer frente a este tipo de situación es poner en marcha una acumulación del reactor (la acumulación de múltiples módulos) de los padres.

Suponiendo que está módulos de la matriz, es decir que tiene algo como esto declarado en la pom.xml "padre" Agregado:

<modules>
  <module>sub-project1</module>
  <module>sub-project2</module>>
</modules>

Sólo cd en el directorio padre y poner en marcha un reactor de acumulación:

$ cd parent
$ mvn install

Maven entonces calcular el orden de construcción (deducido de la gráfica orientada hecha de módulos y sus dependencias) y correr install en todos los módulos en el orden calculada (padre primero , entonces sub-proyecto 1 y, por último sub-project2 para su ejemplo particular).

Sin embargo, no utilice un alcance tipo de import, que está haciendo un mal uso aquí. Retirarla.

Actualización: La pregunta ha sido actualizada mientras estaba respondiendo y los POM mostradas pueden no ilustrar la situación dada en la pregunta original (dependencia inversa, probable error en la identificación del artefacto). Sin embargo, el enfoque sugerido todavía se aplica. Retire la <scope>import</scope> en la dependencia y empezar a construir un reactor a partir de la matriz.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top