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构建独立项目会更好命令行。