28

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

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

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

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

4 回答 4

35

您可以通过将插件的阶段设置为无来禁用插件。

<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>
于 2013-01-31T01:54:33.263 回答
30

在 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 中定义的任何其他插件。关键是您必须复制<id>显示的help:effective-pom,并将 更改<phase>为无效值(例如“none”)。如果您没有<id>(例如在 Jintian DENG 的原始答案中 - 它已被编辑添加一个),它将无法正常工作,正如您所发现的那样。

于 2013-05-02T01:32:00.060 回答
4

要么配置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
于 2019-09-27T12:08:29.880 回答
2

首先执行 maven-compiler-plugin 的原因是因为您触发了一个默认的生命周期绑定。例如,如果您使用mvn package打包 jar ,它将在编译阶段触发 compile:compile。

也许尽量不要使用默认的生命周期,而是使用mvn aspectj:compile代替。

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html有更多关于 maven 默认生命周期绑定的信息

于 2013-01-30T21:59:00.370 回答