我有一个包含多个模块的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>
答案 0 :(得分:2)
如果查看reference documentation for the Maven lifecycle,您会发现compile
在process-classes
之前。
如果您希望执行此步骤,则需要使用mvn -am -pl main process-classes
。
但我建议您始终使用mvn ... install
- 它还会运行测试并确保main
使用的插件实际上是您认为应该使用的插件:如果没有安装,构建将使用来自本地存储库的旧/过时版本(Maven将不神奇地确定“哦,我的反应堆中有一个插件,我将使用它来代替本地存储库中的版本”)。< / p>