当前位置: 首页 > 面试题库 >

Maven:编译包含Java 1.6源代码的AspectJ项目

齐招
2023-03-14
问题内容

主要问题

我想做的很简单。否则,您会认为。但是,没有任何工作正常。

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

注意: 我们的代码无法使用javac进行编译。也就是说,如果未编织方面,则编译将失败(因为我们拥有可以软化异常的方面)。

2011年 2月21日 更新: 对此有两种同等可行的解决方案(两种情况都将 AspectJ-maven-plugin
maven-compiler-plugin结合使用 ):

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

有关这些解决方案的更多信息,请参见答案部分。我认为解决方案2是更好的方法。

相关问题

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

  1. 您如何使maven直接运行Aspectj:compile目标,而无需运行compile:compile?
  2. 您如何忽略compile:compile的失败?
  3. 您如何指定一个指向您自己的AJC编译器(即make compile:compile使用非plexus的aspectj编译器)的自定义compileId?

感谢您提出的所有建议。这些是我尝试过导致我的问题的问题:

尝试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 notrecognized: 1.6

无论我使用哪种版本的plexus编译器(1.8、1.6、1.3等),这都不起作用。我实际上阅读了源代码,发现该编译器不喜欢Java 1.5以上的源代码。

尝试2(失败): 使用附加到编译和测试编译目标的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 mvn clean compile

因为它尝试在运行Aspectj:compile之前执行compile:compile。如上所述,我们的代码无法使用javac进行编译-
方面是必需的。因此,mvn将需要完全跳过compile:compile目标,仅运行Aspectj:compile。

尝试3(有效,但不可接受):

使用与上面相同的配置,但运行:

mvn clean aspectj:compile

这行之有效,因为它可以成功构建,但是不能接受,因为我们需要能够直接运行编译目标和测试编译目标(m2eclipse自动构建取决于这些目标)。此外,以这种方式运行它需要我们阐明沿途要实现的每个目标(例如,我们需要分配资源,运行测试以及部署资源等)


问题答案:

AspectJ插件的1.3版有意将其编译目标的默认阶段从“过程源”更改为“编译”。要恢复在javac之前运行ajc的先前行为,您只需要向相关的“
execution”标记中添加一个“ phase”标记,如下所示:

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


 类似资料:
  • 有时,我们需要从源代码重新编译一个Kali包.幸运的是用APT下载源代码包,进行必要的修改后再用Debian工具重新编译是如此的简单.此例中,为了添加额外的Mifare Key硬编码到mifare格式化工具,我们将重新编译libfreefare这个包. 下载包的源代码 # Get the source package apt-get source libfreefare cd libfreefar

  • [WARN][13:21:45.287]Findbugs需要编译源代码。请在执行声纳之前构建项目,或者检查编译类的位置,以便Findbugs分析您的项目。 我以前从未遇到过这个问题(在同一个项目中,但使用的是sonar的旧版本),所以我在Internet上搜索,发现我可能需要定义来将sonar指向编译的类。(在我的情况下,声纳在过去是自动解决这个问题的)。不过,我在中添加了以下属性: 但是,当看到

  • 问题内容: 从一些类的源代码开始,我看到一些方法包含编译后的代码,在扩展之前,它们看起来像这样: 扩展该方法时,您可以看到其中的代码被写为注释。 请参阅以下方法之一: 我有兴趣进一步了解这些方法以及所使用的语言。 是否可以编写自己的编译代码? 问题答案: 也就是Java(或其他Java兼容语言,如注释所示)。 当给您一个jar文件(例如带有JDK / JRE的rt.jar)时,该文件已经被编译。高

  • 编译solidity源代码 通过solc编译器编译solidity代码到字节码。你可以参考solidity安装文档在本地安装编译器。 编写solidity代码运行: $ solc <contract>.sol --bin --abi --optimize -o <output-dir>/ bin和ABI编译器参数都需要充分利用web3j中的智能合约。 bin,输出包含十六进制编码的solidit

  • 我试图运行GWT编译与maven通过插件:gwt-maven-plugin,但GWT模块包含在测试源路径,即:src/test/java。插件抱怨找不到GWT模块。 但是,当使用GWT类DevMode通过Eclipse启动文件使用该模块时,该模块工作良好。为什么gwt maven插件找不到gwt模块? 该项目包含2个Gwt模块,1个GwtTotalProd包含在主要来源中,一个GwtTotalTe

  • 我的pom文件列表 但是,在时,我得到 当我运行时,我看到实际上我使用的是Java6 它可以在哪里定义?我有源(d)my.zshrc多次。