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

Primary Question

What I want to do is fairly easy. Or so you would think. However, nothing is working properly.

Requirement:

Using maven, compile Java 1.6 project using AspectJ compiler.

Note:

Our code cannot compile with javac. That is, it fails compilation if aspects are not woven in (because we have aspects that soften exceptions).

Update 2/21/2011:

There are two equally viable solutions to this (both cases use the aspectj-maven-plugin in conjuction with the maven-compiler-plugin):

Add

false

to the compiler plugin (thanks

Pascal Thivent)

Add process-sources

to the aspectj compiler plugin

(thanks Andrew Swan)

More info on these solutions is in the answer section. I believe solution #2 is the better approach.

Related Questions

Questions (based on failed attempts below):

How do you get maven to run the aspectj:compile goal directly, without ever running compile:compile?

How do you ignore the failure of compile:compile?

How do you specify a custom compilerId that points to your own ajc compiler (that is make compile:compile use an aspectj compiler other than the plexus one)?*

Thanks for any and all suggestions. These are the things I've tried that have led to my problem/questions:

Attempt 1 (fail):

Specify aspectJ as the compiler for the maven-compiler-plugin:

org.apache.maven.plugins

maven-compiler-plugin

2.2

1.6

1.6

aspectj

org.codehaus.plexus

plexus-compiler-aspectj

1.8

This fails with the error:

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

No matter what version of the plexus compiler I use (1.8, 1.6, 1.3, etc), this doesn't work. I actually read through the source code and found that this compiler does not like source code above Java 1.5.

Attempt 2 (fail):

Use the aspectJ-maven-plugin attached to the compile and test-compile goals:

org.codehaus.mojo

aspectj-maven-plugin

1.3

1.6

1.6

compile

test-compile

This fails when running either:

mvn clean test-compile

mvn clean compile

because it attempts to execute compile:compile before running aspectj:compile. As noted above, our code doesn't compile with javac--the aspects are required. So mvn would need to skip the compile:compile goal altogether and run only aspectj:compile.

Attempt 3 (works but unnacceptable):

Use the same configuration above but instead run:

mvn clean aspectj:compile

This works, in that it builds successfully but it's unacceptable in that we need to be able to run the compile goal and the test-compile goal directly (m2eclipse auto-build depends on those goals). Moreover, running it this way would require that we spell out every goal we want along the way (for instance, we need resources distributed and tests to be run and test resources deployed, etc)

解决方案

Version 1.3 of the AspectJ plugin deliberately changed the default phase of its compile goal from "process-sources" to "compile". To restore the previous behaviour of running ajc before javac, you just need to add a "phase" tag to the relevant "execution" tag, like this:

process-sources

compile

test-compile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值