【问题标题】:How do I disable the maven-compiler-plugin?如何禁用 maven-compiler-plugin?
【发布时间】:2013-01-14 21:14:42
【问题描述】:

我有一个使用 aspectj-compiler-plugin 的 maven 项目。我使用类型间声明,因此在我的 Java 代码中有对 Aspect 代码的引用。因此,maven-compiler-plugin 无法编译,因为它不编译方面代码。

我的问题是:如何禁用 maven-compiler-plugin 运行,因为它没有做任何有用的事情?

有几种方法可以编译这个项目,但它们不是最佳的:

  1. 将排除过滤器添加到 maven-compiler-plugin。该插件仍将运行,但不会尝试编译任何内容。问题是这会破坏 Eclipse 中的 ajdt 项目配置器
  2. 将所有 java 代码移动到 aspectj 文件夹。这也感觉不对。

【问题讨论】:

    标签: maven maven-compiler-plugin


    【解决方案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>
      

      【讨论】:

      • 嗯...这对我不起作用。作为一个简单的尝试示例,我使用了此处指定的项目:fabianmaass.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 项目,有些不是。这对我来说是行不通的,除非有办法混合项目的生命周期。
      猜你喜欢
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多