我必须在同一Maven项目中使用注释处理(apt)和AspectJ。
两者都适合自己,但是我需要基于apt创建的代码来创建方面。因此,我需要进行二进制编织(原始源文件由apt扩展)。如何在Maven项目中启用二进制编织?
我知道唯一的标准选项是使用weaveDependencies参数提供依赖关系,但这太糟糕了。还有其他办法吗?
好的,我可以使用Maven Antrun插件嵌入AspectJ ant任务,但是我不想诉诸于此。
我显然是唯一可以回答我自己的问题的人。
我已经使用Maven Antrun插件通过ant来编译AspectJ 。这是我的pom片段:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.4</version>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>ajc-compile</id>
<phase>process-classes</phase>
<configuration>
<tasks>
<property name="aspectj.sourcepath"
value="${project.basedir}/src/main/aspect" />
<property name="aspectj.binarypath"
value="${project.build.outputDirectory}" />
<property name="aspectj.targetpath"
value="${project.build.directory}/aspectj-classes" />
<property name="scope_classpath" refid="maven.compile.classpath" />
<property name="plugin_classpath" refid="maven.plugin.classpath" />
<ant antfile="ajc-ant.xml" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>ajc-test-compile</id>
<phase>process-test-classes</phase>
<configuration>
<tasks unless="maven.test.skip">
<property name="aspectj.sourcepath"
value="${project.basedir}/src/test/aspect;${project.basedir}/src/main/aspect" />
<property name="aspectj.binarypath"
value="${project.build.testOutputDirectory}" />
<property name="aspectj.targetpath"
value="${project.build.directory}/aspectj-test-classes" />
<property name="scope_classpath" refid="maven.test.classpath" />
<property name="plugin_classpath" refid="maven.plugin.classpath" />
<ant antfile="ajc-ant.xml" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
我首先编译Java类(并让APT负责),将编译后的类用作Aspectj的二进制输入,将Aspectj编译到新文件夹中,然后将生成的编织类移动到原始compile目录中,覆盖非aspectj类。这是我的ant XML文件(很好的部分是,我可以将其用于编译和测试编译):
<project basedir="." default="ajc">
<path id="classpath">
<pathelement path="${scope_classpath}" />
<pathelement path="${plugin_classpath}" />
</path>
<taskdef
classname="org.aspectj.tools.ant.taskdefs.AjcTask"
name="iajc" classpathref="classpath" />
<target name="ajc">
<iajc
sourceroots="${aspectj.sourcepath}"
inpath="${aspectj.binarypath}"
destdir="${aspectj.targetpath}"
classpathref="classpath"
source="1.6"
target="1.6"
/>
<move todir="${aspectj.binarypath}">
<fileset dir="${aspectj.targetpath}">
<include name="**/*.class" />
</fileset>
</move>
</target>
</project>
在下一步中,我现在创建了一个Maven插件,该插件在内部完成所有这些ant调用。虽然我不能在这里共享代码,但我将展示它如何简化POM配置:
<plugin>
<groupId>com.myclient.maven.plugins</groupId>
<artifactId>maven-ajc-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<executions>
<execution>
<id>compile-ajc</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>testcompile-ajc</id>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<aspectSourcePath>${project.basedir}/src/main/aspect</aspectSourcePath>
</configuration>
</execution>
</executions>
<configuration>
</configuration>
</plugin>
使用ANT / GMaven集成,可以轻松组合Maven,Groovy和Ant的功能来组合参数。
问题内容: Eclipse是一个非常好的编辑器,我更喜欢使用它,但是缺少用于Eclipse的GUI设计工具。另一方面,NetBeans在GUI设计中确实很好用。 使用NetBeans进行GUI设计并将Eclipse用于同一项目上的其他所有内容,是否有任何提示,技巧或陷阱? 编辑: 我尝试了Maven,它似乎不起作用(太复杂,对于我的需求)。 问题答案: 使用Netbeans创建GUI。将Eclip
问题内容: 要一起运行它们,几乎没有可用的选项,但是我选择为Junit和TestNG使用不同的配置文件。但是现在的问题是排除和包含测试用例。 由于如果我们在Maven的主项目中添加testNG依赖项,它将跳过所有Junit,因此我决定将其放在单独的配置文件中。所以我使用pom.xml中的以下条目从默认(主要)配置文件中排除了TestNG测试: 与surefire插件相同。因此,它可以与主配置文件配
问题内容: 可以将 Spark RDD 通过管道传输到Python吗? 因为我需要一个python库来对数据进行一些计算,但是我的主要Spark项目基于Scala。有没有办法将两者混合使用或让python访问相同的spark上下文? 问题答案: 实际上,您可以使用Scala和Spark以及常规Python脚本来传递到python脚本。 test.py 火花壳(scala) 输出量 你好约翰 你好林
问题内容: 今天,我一直在尝试寻找一个合适的解决方案来建立一个既包含Java代码又包含Scala代码(它们之间具有双向依赖性)的maven项目。 我发现的解决方案通常包括在该阶段调用scala-maven-plugin或maven-scala- plugin,以便它在默认的maven编译器插件之前运行(示例:http : //www.hascode.com/2012/03 /片段混合- 斯卡拉的J
正在处理一个庞大复杂的应用程序,该应用程序目前正在使用hibernate LocalSessionFactoryBean、HibernateTransactionManager和HibernateTemplate。有没有可能我可以使用JPA进行我的新特性开发,这样我就可以使用SPRING DATA JPA在我的持久性层上工作了?我的当前配置如下。 但是,我想为新的东西添加LocalContaine
我正在构建一个定制的Java库。我把我的大部分“重复”代码都保存在那里,比如文件处理、字符串处理等。每次我想使用它们时,我都必须将该类复制并粘贴到我正在进行的其他项目中。有没有办法让这个自定义库类成为“依赖项”?我在用我的智能手机。