依赖管理不适用于多模块项目

时间:2014-01-23 10:41:20

标签: maven

我有一个包含多个模块的Maven项目,我正在尝试进行设置,以便模块依赖项自动构建到构建依赖模块到所请求生命周期阶段所需的正确生命周期阶段。

在该示例中,模块plugin构建了一个Maven插件,该插件用于生成源代码并由模块main使用。如果我只是尝试使用mvn -am -pl main compile,则会编译模块plugin,但不执行process-classes生命周期阶段(这是插件可用的必要条件)。然后编译模块main然后失败,出现以下错误:

[ERROR] Failed to parse plugin descriptor for example:plugin:1.0.0-SNAPSHOT (/Users/ims/Dropbox/IMS/Projects/PARITy_R4/codegen-test-simple/plugin/target/classes): No plugin descriptor found at META-INF/maven/plugin.xml -> [Help 1]

Maven或其插件是否能够解析多模块项目中模块的依赖关系并将其构建为其他模块所必需的阶段?如果是这样,我如何设置项目才能使其工作?

这些是我项目的POM:

的pom.xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>
    <groupId>example</groupId>
    <artifactId>project</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>plugin</module>
        <module>main</module>
    </modules>
</project>

插件/ pom.xml中:

<project xmlns="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>
    <groupId>example</groupId>
    <artifactId>plugin</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>maven-plugin</packaging>
    <parent>
        <groupId>example</groupId>
        <artifactId>project</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugin-tools</groupId>
            <artifactId>maven-plugin-annotations</artifactId>
            <version>3.2</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-plugin-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <goalPrefix>configurator</goalPrefix>
                </configuration>
                <executions>
                    <execution>
                        <id>default-descriptor</id>
                        <goals>
                            <goal>descriptor</goal>
                        </goals>
                        <phase>process-classes</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

主要/ pom.xml中:

<project xmlns="http://maven.apache.org/POM/4.0.0">
    <modelVersion>4.0.0</modelVersion>
    <groupId>example</groupId>
    <artifactId>main</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <parent>
        <groupId>example</groupId>
        <artifactId>project</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <build>
        <plugins>
            <plugin>
                <groupId>example</groupId>
                <artifactId>plugin</artifactId>
                <version>1.0.0-SNAPSHOT</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>codegen</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

1 个答案:

答案 0 :(得分:2)

如果查看reference documentation for the Maven lifecycle,您会发现compileprocess-classes之前。

如果您希望执行此步骤,则需要使用mvn -am -pl main process-classes

但我建议您始终使用mvn ... install - 它还会运行测试并确保main使用的插件实际上是您认为应该使用的插件:如果没有安装,构建将使用来自本地存储库的旧/过时版本(Maven将神奇地确定“哦,我的反应堆中有一个插件,我将使用它来代替本地存储库中的版本”)。< / p>