【发布时间】:2012-08-19 14:29:47
【问题描述】:
我有一个 maven3 多模块项目,出于一个奇怪的原因,我需要为我的一个子模块自定义 POM 文件名(即:module-pom.xml)
是否可以在父 pom 中进行配置?
奇怪的原因解释起来有点长,抱歉,但你会明白的。
上下文
我正在开发一个也使用 LGPL 项目的封闭源代码项目。这个项目叫
main我希望
main声明每个项目的模块,关闭和打开。完整的构建应该使用唯一的mvn clean package命令。在
mainreactor 项目中,我有lgpl-reactor多模块项目,其中包含 3 个 LGPL 模块(API、插件和分发项目)。一些开发者只能访问lgpl-reactor,所以我也希望这个项目使用mvn clean package命令从它的文件夹构建,就像一个完全独立的项目。我还有
main-dist项目,它是一个仅限 maven-assembly-plugin 的项目(用于构建分发版)。
问题
-
1234563 .xml 未找到)。
如果我从
lgpl-reactorpom.xml 中删除父引用,独立的lgpl-reactor构建工作,但main-dist创建的程序集无效(缺失。
如何解决?
使用另一个 POM 文件 module-pom.xml 用于
lgpl-reactor模块声明在main模块声明列表中。从main项目执行完整构建时,module-pom.xml包含对父 POM 的引用并且工作正常。使用默认的 POM 文件 pom.xml 进行独立构建
lgpl-reactor。这个POM很难引用带有<parent>标签的relativePath属性的父pom
但是我该怎么做呢?如果可能的话 ?或者有没有更好的解决方案?
主反应堆项目目录
lgpl-lib [LGPL Library]
lgpl-ext [LGPL Reactor Project]
closed-core [Closed source module]
closed-spring [Closed source module]
closed-web [Closed source module]
closed-webserver [Closed source module]
main-dist [Main assembly module]
pom.xml [Main Reactor POM]
LGPL 反应堆项目目录
lgpl-api [LGPL API module]
lgpl-plugins [LGPL Plugins module]
lgpl-ext-dist [LGPL assembly module]
main-pom.xml [Main Reactor POM, copy of main pom.xml]
pom.xml [Standalone LGPL Reactor POM]
module-pom.xml [Module LGPL Reactor POM]
主反应堆 POM (pom.xml & lgpl-reactor/main-pom.xml)
...
<modelVersion>4.0.0</modelVersion>
<groupId>main.group</groupId>
<artifactId>main</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Main</name>
<packaging>pom</packaging>
...
<modules>
<module>closed-core</module>
<module>closed-web</module>
<module>closed-webserver</module>
<module>closed-spring</module>
<module>lgpl-reactor</module>
<module>lgpl-lib</module>
<module>main-dist</module>
</modules>
...
lgpl-reactor/pom.xml
...
<modelVersion>4.0.0</modelVersion>
<artifactId>lgpl-reactor</artifactId>
<name>LGPL Reactor</name>
<packaging>pom</packaging>
<parent>
<groupId>main.group</groupId>
<artifactId>main</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>main-pom.xml</relativePath>
</parent>
...
...
<modules>
<module>lgpl-api</module>
<module>lgpl-plugins</module>
<module>lgpl-ext-dist</module>
</modules>
...
main-dist的pom.xml
<project>
<parent>
<groupId>main.group</groupId>
<artifactId>main</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>main-dist</artifactId>
<packaging>pom</packaging>
<description>Main Distribution</description>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>plugins-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>assembly.xml</descriptor>
</descriptors>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>closed</groupId>
<artifactId>closed-webserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>closed</groupId>
<artifactId>closed-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
main-dist的assembly.xml
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>plugins-assembly</id>
<formats>
<format>dir</format>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>../closed-webserver/conf</directory>
<outputDirectory>conf</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<excludes><exclude>main.group:closed-webserver</exclude></excludes>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
<moduleSets>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>main.group:closed-webserver</include>
</includes>
<binaries>
<outputFileNameMapping>${module.artifactId}${dashClassifier?}.${module.extension}</outputFileNameMapping>
<unpack>false</unpack>
<includeDependencies>false</includeDependencies>
</binaries>
</moduleSet>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>main.group:closed-spring</include>
</includes>
<binaries>
<outputFileNameMapping>${module.artifactId}${dashClassifier?}.${module.extension}</outputFileNameMapping>
<unpack>false</unpack>
<includeDependencies>false</includeDependencies>
</binaries>
</moduleSet>
<moduleSet>
<useAllReactorProjects>true</useAllReactorProjects>
<includes>
<include>main.group:lgpl-ext-dist</include>
</includes>
<binaries>
<outputDirectory>plugins</outputDirectory>
<unpack>false</unpack>
<includeDependencies>true</includeDependencies>
</binaries>
</moduleSet>
</moduleSets>
</assembly>
【问题讨论】:
-
你能不能告诉我们那个奇怪的原因是什么?这可能会帮助我们了解您为什么需要它,然后可能会想出一个解决方案。
-
好的,我已经添加了一些细节......
-
自定义 pom 路由对您不起作用怎么办?在多模块清单中,您可以指定子工件的自定义 POM 文件名。