Creé un proyecto de varios módulos en maven que es el siguiente:
root/pom.xml |________client/pom.xml |________/src/main/java |________/src/main/resources |________common/pom.xml |________/src/main/java |________tools/pom.xml |________/src/main/java |________server/pom.xml |________/src/main/java |________/src/main/resourcesMe gustaría compilar el código del módulo "cliente" que depende de TODAS las clases de Java en el módulo "común" pero en ALGUNAS clases de Java en el módulo de "herramientas" . Usando el complemento build-helper-maven-plugin como se muestra a continuación, pude agregar todos los archivos fuente de Java en common/ path, pero necesito una forma de definir archivos java individuales como fuentes que están en tools/ .
<groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>../common/src/main/java</source> <!-- Adding single java files as below does not work --> <source>../tools/log/Log.java</source> <source>../tools/socket/SocketClient.java</source> <!-----------------------------------------------------> </sources> </configuration> </execution> </executions>Debe incluir el módulo "común" y "herramientas" como dependencia en "cliente". Luego, puede ejecutar la compilación en la raíz del proyecto: mvn clean install: compilará todos los módulos.
No intente usar partes de un módulo como dependencia. Maven no admite esto y da como resultado construcciones frágiles y difíciles de mantener.
Si solo necesita partes de tools , entonces esta es una señal clara de que las tools son demasiado grandes y necesita dividirlas en dos módulos.
Ok, según los comentarios recibidos, parece que la solución ideal es dividir los módulos en submódulos y usarlos como dependencias. Sin embargo, dado que actualmente es una tarea que consume mucho tiempo, estoy publicando una solución rápida y sucia sobre cómo puede incluir uno o más archivos Java en su compilación copiando los archivos en un nuevo directorio de origen, src/main/external , y luego agregue este directorio como parte de sus fuentes.
<build> <plugins> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>copy-source-java-files</id> <phase>generate-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>src/main/external</outputDirectory> <overwrite>true</overwrite> <resources> <resource> <!-- External source directory --> <directory>../tools/src/main/java/</directory> <includes> <!-- Files to be copied along with their directory paths --> <include>tools/log/Log.java</include> <include>tools/socket/SocketClient.java</include> <include>tools/client/reader/**</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>src/main/java</source> <source>src/main/resources</source> <source>../common/src/main/java</source> <!-- Here we add the source with the files copied --> <source>src/main/external</source> </sources> </configuration> </execution> </executions> </plugin> </plugins> </build>La salida después de la compilación sería la siguiente:
root/pom.xml |________client/pom.xml |________/src/main/java |________/src/main/resources |________/src/main/external <----- This contains all external java files.