Pergunta

Eu pesquisei isso no Google e parece que ninguém tem uma resposta, mas parece uma coisa tão elementar que deveria ser possível.

Eu tenho a seguinte estrutura do projeto:

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

O sub-project2 precisa ter o sub-projeto1 como uma dependência.

Então, eu tenho isso no POM do sub-projeto2:

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

....

Quando eu faço isso, o Maven tenta Dowload do arquivo subproject1.jar, que ainda não existe porque ainda não está pronto para o repo.

Eu tentei colocar um <scope>import</scope> Na dependência, mas isso também não funcionou - o mesmo resultado.

Então, o que preciso fazer para fazer com que o MAVEN observe o sub-projeto1 ao criar o sub-projeto2?

EDITAR Aqui estão alguns trechos de pom:

Pai:

<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-Projeto1:

<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-Projeto2:

<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>

O erro que estou recebendo quando recebi mvn clean install no pai está:

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

Com muitas aulas/pacote não encontrados erros

Foi útil?

Solução

Você deve ter um mestre POM no nível dos pais, no qual listará os módulos do seu projeto.

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

Em cada subprojeto, você deve fazer referência a seus pais:

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

E você especifica as dependências entre o projeto exatamente como você fez. Eu acho que você perdeu algumas das etapas que descrevi.

Editar: você deve emitir seu Instalação limpa do MVN no nível dos pais.

Outras dicas

Quando eu faço isso, o Maven tenta Dowload do arquivo subproject1.jar, que ainda não existe porque ainda não está pronto para o repo.

Esse é o comportamento normal, o maven resolve dependências através do repositório local, então você precisa install Sub-Projeto1 Primeiro. Na verdade, a maneira comum de lidar com esse tipo de situação é lançar uma construção de reator (uma construção de vários módulos) do pai.

Supondo que você esteja agregando módulos nos pais, ou seja, você tem algo assim declarado no "pai" pom.xml:

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

Apenas cd no diretório pai e inicie uma construção de reator:

$ cd parent
$ mvn install

Maven vai então Calcule a ordem de construção (deduzido do gráfico orientado feito de módulos e suas dependências) e executado install em todos os módulos Na ordem calculada (pai primeiro, depois sub-project1 e finalmente subproject2 para o seu exemplo específico).

Mas não use um alcance do tipo import, você está usando mal aqui. Remova.

Atualizar: A pergunta foi atualizada enquanto eu estava respondendo e os POMs mostrados não ilustram a situação dada na pergunta original (dependência revertida, um erro provável no ID do artefato). Mas a abordagem sugerida ainda se aplica. Remova o <scope>import</scope> Sobre a dependência e inicie uma criação de reator do pai.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top