从存储库而不是相对文件路径获取maven模块

时间:2010-08-16 14:13:22

标签: maven-2

我的父项目包括:

<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.)失败吗?

2 个答案:

答案 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个模块中的单元测试,您有一个巨大的构建失败。所以您修复测试并继续从您所在的地方开始,节省重建的时间所有以前的模块)


编辑:我刚刚意识到你的模块在根目录之外。在我看来,这违反了maven模块的概念,因为它打破了上面指定的反应堆功能。