我的父项目包括:
<modules>
<module>../module1</module>
<module>../module2</module>
<module>../module3</module>
</modules>
和
的模块<parent>
<groupId>com.cc</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
我可以以某种方式指定,如果../module2/上没有src,那么从存储库加载这些模块会导致Caused by: java.io.FileNotFoundException: C:\work\temp\wid7\workspace\module2 (The system cannot find the file specified.)
失败吗?
答案 0 :(得分:3)
可以通过个人资料解决问题。
<profiles>
<profile>
<id>module1</id>
<activation>
<file>
<exists>../module1/pom.xml</exists>
</file>
</activation>
<modules>
<module>../module1</module>
</modules>
</profile>
<profile>
<id>module2</id>
<activation>
<file>
<exists>../module2/pom.xml</exists>
</file>
</activation>
<modules>
<module>../module2</module>
</modules>
</profile>
...
</profiles>
配置文件将模块连接到一个。所以其他模块来自存储库。
答案 1 :(得分:3)
虽然ArchCC已经为您的问题提供了an acceptible workaround,但这里的主要问题是您误解了模块概念。
模块是构建时关系,而不是运行时依赖关系(尽管它们通常没有意义,除非它们也被引用为依赖关系)。通过多模块项目,您可以使用通用配置一步执行复杂的构建。一旦构建发生,部署的pom中的<modules>
块没有任何意义,因此如果没有它们,指定模块绝对没有意义。
如果您的问题是您只想构建项目的一部分,那么解决方案就是使用高级reactor命令。以下是mvn --help
的摘录:
usage: mvn [options] [<goal(s)>] [<phase(s)>]
Options:
-am,--also-make If project list is specified, also
build projects required by the
list
-amd,--also-make-dependents If project list is specified, also
build projects that depend on
projects on the list
-pl,--projects <arg> Build specified reactor projects
instead of all projects
-rf,--resume-from <arg> Resume reactor from specified
示例:
mvn -am -pl api,client/impl
构建模块api和client / impl(嵌套模块也在这里工作)及其所有依赖项(在当前树中)
mvn -amd -pl core
构建模块核心以及将其作为依赖项引用它的所有模块
mvn -rf my/deep/nested/module
从指定的模块恢复反应堆构建(方案:由于第25个模块中的单元测试,您有一个巨大的构建失败。所以您修复测试并继续从您所在的地方开始,节省重建的时间所有以前的模块)