我有一个使用aspectj-compiler-plugin的maven项目。我使用intertype声明,因此在我的Java代码中引用了Aspect代码。因此,maven-compiler-plugin无法编译,因为它不编译方面代码。
我的问题是:如何禁止maven-compiler-plugin运行,因为它没有做任何有用的事情?
我有几种方法可以让这个项目进行编译,但它们是次优的:
答案 0 :(得分:29)
您可以通过将插件的阶段设置为无来禁用插件。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
答案 1 :(得分:26)
在Maven 3中,以下内容将执行此操作,例如禁用clean插件:
<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>default-clean</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
相同的技术可用于超级POM,打包类型或父POM中定义的任何其他插件。关键是您必须复制<id>
所示的help:effective-pom
,并将<phase>
更改为无效值(例如“无”)。如果你没有<id>
(例如在金田邓的原始答案中 - 它已被编辑添加一个),它将无法正常工作,如你所发现的那样。
答案 2 :(得分:2)
maven-compiler-plugin首先执行的原因是因为你触发了一个默认的生命周期绑定。例如,如果您使用 mvn package 打包jar,它将在编译阶段触发compile:compile。
也许尽量不要使用默认生命周期,而是使用 mvn aspectj:compile 。
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html提供了有关maven默认生命周期绑定的更多信息
答案 3 :(得分:0)
配置skipMain
参数:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<skipMain>true</skipMain>
</configuration>
</plugin>
</plugins>
</build>
或通过maven.main.skip
属性:
mvn install -Dmaven.main.skip=true