Creo que lo que describes es posible. En primer lugar, crear un POM padres, donde se declara dependencias en el elemento <dependencyManagement>
:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>groupIdA<groupId>
<artifactId>parent</artifactId>
<packaging>pom<packaging>
<version>1-SNAPSHOT</version>
...
<dependencyManagement>
<!-- Standard dependencies used in several build modules. Ensures all modules
use the same version for these dependencies -->
<dependencies>
<dependency>
<groupId>org.directwebremoting</groupId>
<artifactId>dwr</artifactId>
<version>3.0.M1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.0.0.RELEASE</version>
</dependency>
...
</dependencies>
<dependencyManagement>
...
</project>
Luego, en un proyecto secundario, declarar las dependencias que necesita sin declarar su versión:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>parent</artifactId>
<groupId>groupIdA</groupId>
<version>1-SNAPSHOT</version>
</parent>
<artifactId>childB</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.directwebremoting</groupId>
<artifactId>dwr</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
...
</dependencies>
...
</project>
Por último, utilice el predeterminado jar-with-dependencies
descriptor de ensamblaje predefinido para crear un ensamblado general de un paquete binario con todas las bibliotecas de dependencias incluidas desempaquetadas dentro del archivo.
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- append to the packaging phase. -->
<goals>
<goal>single</goal> <!-- goals == mojos -->
</goals>
</execution>
</executions>
</plugin>
[...]
</plugins>
</build>
</project>
para crear el ensamblado de proyectos, activar el paquete de fase:
mvn package
Y esto producirá el siguiente montaje en el directorio de destino:
target/child-1.0-SNAPSHOT-jar-with-dependencies.jar
Estoy no estoy seguro de lo que quiere hacer con este ensamblado (utilícelo como dependencia en proyectos de portlet frente a las dependencias de extracción desde el POM principal). Facilite el despliegue de Liferay. solo por año?). Todas las opciones son posibles sin embargo. Para obtener más información, consulte la documentación Maven Assembly plugin.
I' Estoy teniendo problemas para entender exactamente lo que está tratando de hacer, pero parece algo para OSGI - http://www.osgi.org/Main/HomePage. Pensaría que si tuviera dependencias explícitas para cada artículo en su pom, siempre obtendría esa versión (suponiendo que esté indicando SNAPSHOTs). Pero si intenta evitar que cada portlet funcione con su propio conjunto de bibliotecas y evite las interacciones, OSGI puede hacer esto por usted. – Tim
Tim, definitivamente creo que osgi es el camino a seguir, pero haría que todo el equipo cambie la forma en que se hacen las cosas, y la gerencia probablemente se negaría a aprobar ir en esa dirección. Además, no sé qué tan bien cabría el modelo de osgi en jboss eap 4.3.0, probablemente más problemas y pruebas de lo que vale. – feniix