maven multimodule中的自定义pom.xml文件名
我有一个maven3多模块项目,由于一个奇怪的原因,我需要为我的一个子模块自定义POM文件名(即:module-pom.xml)
是否可以在父pom中配置它?
奇怪的原因有点长,以解释抱歉,但你将有明确的背景。
上下文
-
我正在开发一个也使用LGPLed项目的封闭源项目。 这个项目叫做
main
-
我希望
main
声明每个项目的模块,关闭和打开。 应使用唯一的mvn clean package
命令进行完整构建。 -
在
main
反应堆项目中,我有lgpl-reactor
多模块项目,包含3个LGPL模块(API,插件和分发项目)。 有些开发人员只能访问lgpl-reactor
,所以我也希望这个项目使用mvn clean package
命令从其文件夹构建,就像一个完全独立的项目。 -
我还有
main-dist
项目,它只是一个maven-assembly-plugin项目(用于构建发行版)。
问题
-
如果我添加对
lgpl-reactor
pom.xml的父引用,则全局main
构建工作正常,并且main-dist
创建的程序集有效,但lgpl-reactor的独立构建失败(未找到主pom.xml)。 -
如果我从
lgpl-reactor
pom.xml中删除父引用,则独立的lgpl-reactor
构建工作,但main-dist
创建的程序集无效(缺少。
怎么解决这个?
-
在
main
模块声明列表中使用另一个POM文件module-pom.xml进行lgpl-reactor
模块声明。 当从main
项目执行完整构建时,module-pom.xml
包含对父POM的引用并且正常工作。 -
使用默认的POM文件pom.xml进行
lgpl-reactor
构建。 此POM很难使用标记的
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)
... 4.0.0 main.group main 0.0.1-SNAPSHOT Main pom ... closed-core closed-web closed-webserver closed-spring lgpl-reactor lgpl-lib main-dist ...
LGPL反应器/ pom.xml的
... 4.0.0 lgpl-reactor LGPL Reactor pom main.group main 0.0.1-SNAPSHOT main-pom.xml ... ... lgpl-api lgpl-plugins lgpl-ext-dist ...
main-dist
pom.xml
main.group main 0.0.1-SNAPSHOT main-dist pom Main Distribution maven-assembly-plugin plugins-assembly package single assembly.xml false closed closed-webserver 0.0.1-SNAPSHOT closed closed-api 0.0.1-SNAPSHOT
main-dist
assembly.xml
plugins-assembly dir zip false ../closed-webserver/conf conf main.group:closed-webserver lib true main.group:closed-webserver ${module.artifactId}${dashClassifier?}.${module.extension} false false true main.group:closed-spring ${module.artifactId}${dashClassifier?}.${module.extension} false false true main.group:lgpl-ext-dist plugins false true
我建议将文件夹结构更改为以下内容。
root (pom.xml) +-- closed-core +-- closed-web +-- closed-webserver +-- closed-spring +-- lgpl-reactor +-- lgpl-lib +-- lgpl-dist +-- lgpl-etc..
比你不需要separte module-pom.xml文件。 您可以使用pom.xml作为默认值。
如果你不想建立lgpl-reactory,你可以简单地给:
mvn -pl lgpl-reactory clean package
如果你在lgpl的其他模块中有依赖关系,你可以使用:
mvn -am -pl lgpl-reactory clean package
这将构建所有依赖模块。
您可以覆盖默认的pom.xml。 Maven有-f命令选项。
mvn -f /pom.xml clean install
一个解决方案是应用逆逻辑,并使用“mvn -f standalone-pom.xml clean package”来构建lgpl-reactor作为独立项目……但是如果使用标准maven2构建独立项目会更好命令行。