如何禁用 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 显示的&lt;id&gt;,并将&lt;phase&gt; 更改为无效值(例如“none”)。如果您没有&lt;id&gt;(例如在 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)。上面的解决方案暂时解决了这个问题。 这个答案最初是错误的(缺少&lt;id&gt; 标签),但后来被编辑为正确的(添加了&lt;id&gt; 标签)。我认为@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 令牌以及为啥我们必须禁用它?

如何禁用 UIButton 和禁用 touchEvent 响应程序?

如何禁用ECSHOP缓存,如何关闭ECSHOP缓存

表单提交后如何禁用以前禁用的选择

LINUX7如何彻底禁用ipv6和如何临时禁用

如何在 DataGridView 中禁用排序?