gpt4 book ai didi

java - Maven : compile aspectj project containing Java 1. 6 源码

转载 作者:IT老高 更新时间:2023-10-28 20:53:19 26 4
gpt4 key购买 nike

主要问题

我想做的事情相当简单。或者你会这么想。但是,没有任何工作正常。

要求:使用maven,使用AspectJ编译器编译Java 1.6项目。

注意:我们的代码不能用 javac 编译。也就是说,如果没有编织切面(因为我们有软化异常的切面),它会导致编译失败。


2011 年 2 月 21 日更新:有两种同样可行的解决方案(两种情况都使用 aspectj-maven-pluginmaven-compiler-plugin):

  1. 添加 <failOnError>false</failOnError> 到编译器插件(谢谢 Pascal Thivent )
  2. 添加 <phase>process-sources</phase> 到aspectj编译器插件 (感谢 Andrew Swan)

关于这些解决方案的更多信息在答案部分。我相信解决方案 #2 是更好的方法。







相关问题

问题(基于以下失败的尝试):

  1. 如何让 maven 直接运行 aspectj:compile 目标,而无需运行 compile:compile?
  2. 如何忽略compile:compile的失败?
  3. 您如何指定一个指向您自己的 ajc 编译器的自定义 compilerId(即 make compile:compile 使用除 plexus 之外的 aspectj 编译器)?*
感谢您的任何建议。这些是我尝试过的导致我的问题/问题的事情:


尝试 1(失败):指定 aspectJ 作为 maven-compiler-plugin 的编译器:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerId>aspectj</compilerId>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-aspectj</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
</plugin>

这失败并出现错误:

org.codehaus.plexus.compiler.CompilerException: The source version was not recognized: 1.6

无论我使用什么版本的 plexus 编译器(1.8、1.6、1.3 等),这都不起作用。我其实通读了源码,发现这个编译器不喜欢Java 1.5以上的源码。

尝试 2(失败):使用附加到 compile 和 test-compile 目标的 aspectJ-maven-plugin:

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>

运行时失败:

mvn clean test-compile<br/>
mvn clean compile

因为它会在运行 aspectj:compile 之前尝试执行 compile:compile。如上所述,我们的代码不能用 javac 编译——这些方面是必需的。所以 mvn 需要完全跳过 compile:compile 目标,只运行 aspectj:compile。

尝试 3(有效但 Not Acceptable ):

使用与上述相同的配置,但改为运行:

mvn clean aspectj:compile

这行得通,因为它构建成功,但它是 Not Acceptable ,因为我们需要能够直接运行编译目标和测试编译目标(m2eclipse 自动构建取决于这些目标)。此外,以这种方式运行它需要我们在此过程中阐明我们想要的每一个目标(例如,我们需要分发资源、运行测试和部署测试资源等)

最佳答案

AspectJ 插件 1.3 版故意将其编译目标的默认阶段从 process-sources 更改为 compile,参见 MASPECTJ-13 .这会导致像你这样的后续问题或 MASPECTJ-92 .要恢复之前在javac之前运行ajc的行为,只需要在相关的“execution”标签上加一个“phase”标签,如下:

<execution>
<phase>process-sources</phase> <!-- or any phase before compile -->
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>

关于java - Maven : compile aspectj project containing Java 1. 6 源码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2610633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com