[URGENTE] Hierarquia Maven?

1 resposta
William_Alves

Olá Pessoal.

Sou novo com maven e conversando com um amigo ele fez o favor de me confundir.

Eu tinha 4 projetos A B C D, cada um deles tinha um POM e no final eu atrelava a um EAR que tinha um pom, eu dava um mvn install em cada um deles, e por ultimo no EAR:

EAR

  • A.jar --> C.jar*
  • B.jar --> D.jar*
  • C.jar
  • D.jar
  • -Dentro do projeto

Onde A depende de C e B depende de D mas C esta dentro de A e D esta dentro de B.

"Amigo" me disse que eu não preciso dar mvn isntall em cada um dos Ps e sim só no POM do EAR, isso é verdade, tipo pelo que ele me explicou o maven desceria a estrutura dando install em cada um dos demais sozinho e depois subria para o EAR e concluiria o install dele.

Bom não sei se isso realmente ocorre, mas sei que encontrei um impecilio nessa abordagem.

EAR

  • A.jar --> C.jar^
  • B.jar --> D.jar^
  • C.jar
  • D.jar
    ^ - fora do projeto

Tenho esta mesma estrutura porém com C fora de A e D fora de B, estando C e D apenas na hierarquia do EAR.
Sendo assim os projetos A e B estão com erros, e o mvn install não consegue ser completado.

Pergunta, realmente dando install apenas no EAR ele vai seguindo pelos projetos abaixo?
Se sim, tem como eu fazer A e B enxergarem C e D que esta na estrutura do EAR, tipo obrigando a executar primeiro C e D (se é que isso é possível, se sim será que assim A e B veriam C e D, e permitiriam completar o install?

Toda ajuda é bem vinda inclusive outras formas de usar o maven, pensei em parent (andei vendo na net) mas acho que não me atende nesse sentido.

Abraços.

*ps: não posso usar os plugins tenho que fazer via console os comandos e também num queria ser deselegante caso realmente o maven percorra a hierarquia executando os comandos.

1 Resposta

iogui

Olá, William,

O que vc quer fazer é fácil.
Crie um diretorio que será o diretório pai e vai conter todos os projetos, e dentro dele crie os diretorios dos subprojetos, incluindo um subprojeto que vai servir só pra construir o ear:

dirPai:
-A
-B
-C
-D
-EAR

A, B, C e D serão jar ou war, tanto faz.
No diretorio pai (projeto pai) crie um pom que indique que este é um projeto com vários modulos:

<project ... >
            ....

		 <modelVersion>4.0.0</modelVersion>
		 <groupId>net.iogui</groupId>
		 <artifactId>testeEJB</artifactId>
		 <packaging>pom</packaging>
		 <name>testeEJB</name>
		 <version>1.0</version>
		 <description>Uma aplicação de teste para uso de EJB e MDB com JPA</description>
		 
		 <modules>
			<module>testeEJB-A</module>
			<module>testeEJB-B</module>
			<module>testeEJB-C</module>
			<module>testeEJB-D</module>
			<module>testeEJB-EAR</module>
		 </modules>


                 ....

</project>

Veja que este pom tem packaging “pom” que quer dizer que, por si só, ele não gera nada mas é usado como pai para os pons dos subprojetos.
Depois é só criar um pom na raiz de cada subprojeto declarando seu parent como o pom anteriormente criado no diretorio pai:

<project ... >

            ...

		 <parent>
			<groupId>net.iogui</groupId>
			<artifactId>testeEJB</artifactId>
			<version>1.0</version>
		 </parent>
		 
		 <modelVersion>4.0.0</modelVersion>
		 <artifactId>testeEJB-A</artifactId>
		  <packaging>jar</packaging>
		 <name>testeEJB-A</name>
		 <version>1.0</version>

             ...
</project>

O packaging pode ser jar, se for um projeto de lib, ejb se for um projeto de ejb, war se for um projeto web e etc.
No projeto do ear, crie um pom com packaging ear e configure o plugin de geração do ear para incluir os jars/wars/ejbs na forma que quiser. Ex:

...

		 <build>
			<plugins>

				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-ear-plugin</artifactId>
					<configuration>
						<version>5</version>
						<defaultLibBundleDir>lib</defaultLibBundleDir>
						<modules>
							<ejbModule>
								<groupId>${project.groupId}</groupId>
								<artifactId>testeEJB-A</artifactId>
								<bundleDir>/</bundleDir>
							</ejbModule>
							<ejbModule>
								<groupId>${project.groupId}</groupId>
								<artifactId>testeEJB-B</artifactId>
								<bundleDir>/</bundleDir>
							</ejbModule>
							<webModule>
								<groupId>${project.groupId}</groupId>
								<artifactId>testeEJBMDB-web</artifactId>
								<contextRoot>/ejbmdb</contextRoot>
							</webModule>
						</modules>
					</configuration>
				</plugin>

			</plugins>
		 </build>

           ...

No pom pai, vc pode definir todas as dependencias que sejam comuns a todos os projetos e no pom dos filhos defina as dependencias especificas.
Se A depende de B mas não de C ou D, apenas acrescente a dependencia de B em A.

Pronto, agora é só entrar no diretorio pai e digitar:
mvn package

E ele vai buildar tudo pra vc e entregar um ear prontinho pra uso! :wink:

Criado 28 de janeiro de 2011
Ultima resposta 29 de jan. de 2011
Respostas 1
Participantes 2