如何禁用 maven-compiler-plugin?
Posted
技术标签:
【中文标题】如何禁用 maven-compiler-plugin?【英文标题】:How do I disable the maven-compiler-plugin? 【发布时间】:2013-01-14 21:14:42 【问题描述】:我有一个使用 aspectj-compiler-plugin 的 maven 项目。我使用类型间声明,因此在我的 Java 代码中有对 Aspect 代码的引用。因此,maven-compiler-plugin 无法编译,因为它不编译方面代码。
我的问题是:如何禁用 maven-compiler-plugin 运行,因为它没有做任何有用的事情?
有几种方法可以编译这个项目,但它们不是最佳的:
-
将排除过滤器添加到 maven-compiler-plugin。该插件仍将运行,但不会尝试编译任何内容。问题是这会破坏 Eclipse 中的 ajdt 项目配置器
将所有 java 代码移动到 aspectj 文件夹。这也感觉不对。
【问题讨论】:
【参考方案1】:要么配置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
【讨论】:
这很有趣,有两个解决方案可以谈论“无”阶段,但这是唯一对我有用的解决方案。即使我在编译阶段有其他执行,使用阶段 none 仍会导致 maven-compiler-plugin 尝试将我的 Java 9 代码构建为 Java 6!【参考方案2】:在 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>
相同的技术可用于在 super-POM、包装类型或父 POM 中定义的任何其他插件。关键是您必须复制help:effective-pom
显示的<id>
,并将<phase>
更改为无效值(例如“none”)。如果您没有<id>
(例如在 Jintian DENG 的原始答案中 - 它已被编辑添加一个),它将无法正常工作,正如您所发现的那样。
【讨论】:
【参考方案3】:您可以通过将插件的阶段设置为无来禁用插件。
<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>
【讨论】:
嗯...这对我不起作用。作为一个简单的尝试示例,我使用了此处指定的项目:f***maass.de/?p=87 但 maven-compiler-plugin 仍在运行 该解决方案完美运行。我遇到了出现此错误的情况:无法执行目标 org.apache.maven.plugins:maven-compiler-plugin:x.x.x.:compile (default-compile)。上面的解决方案暂时解决了这个问题。 这个答案最初是错误的(缺少<id>
标签),但后来被编辑为正确的(添加了<id>
标签)。我认为@AndrewEisenberg 的评论认为它不起作用是针对这个答案的原始错误版本
我会相信你的话,因为我已经 5 年没有使用maven-compiler-plugin
了。【参考方案4】:
首先执行 maven-compiler-plugin 的原因是因为您触发了一个默认的生命周期绑定。例如,如果您使用 mvn package 打包 jar,它将在编译阶段触发 compile:compile。
也许尽量不要使用默认的生命周期,而是使用 mvn aspectj:compile。
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html 有更多关于 maven 默认生命周期绑定的信息
【讨论】:
如果所有项目都是 aspectj 项目,则此方法有效,但在我的多项目构建中,有些是 aspectj 项目,有些不是。这对我来说是行不通的,除非有办法混合项目的生命周期。以上是关于如何禁用 maven-compiler-plugin?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 中禁用 CSRF 令牌以及为啥我们必须禁用它?