Como configurar uma dependência de subprojeto no Maven sem implantar frascos?
-
24-09-2019 - |
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
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.