iajc使用方面路径

时间:2016-08-15 08:46:06

标签: ant aspectj compile-time-weaving

我有一个库(比如lib1),它包含几个方面类(比如aspect1.java和aspect2.java)。 我想在我的服务代码中只编织aspect1.java。 在编译时编织中使用ant iajc目标是否可行? 我知道在加载时间编织中可以通过指定在aop.xml中编织哪些方面来实现。

我们在iajc中也有aspectpath,但我不知道如何配置它来接受单个类文件而不是完整的jar文件。

<target name="weave-with-ajc">
    <ht-aj:standard-aj-weave>
        <inpath>
            <path path="${classes.dir}" />
        </inpath>
        <aspectpath>
            <path path="${standard.compile.classpath}" />
            <path path="${bp:[Library]pkg.classpath}" />
        </aspectpath>
    </ht-aj:standard-aj-weave>
</target>

我只想编织特定的方面,而不是编辑库中的所有方面。请建议。

2 个答案:

答案 0 :(得分:0)

为编译时编织以及https://bugs.eclipse.org/bugs/show_bug.cgi?id=124460

添加了aop.xml支持

答案 1 :(得分:0)

尽管mentioned enhancement仍未实现,但他们提供了一种简单的方法来明确指定要在编译时编辑的方面。在我的例子中,我使用spring-aspects编织AnnotationBeanConfigurerAspect以支持@Configurable注释,问题是编织在spring-aspects中找到的所有方面。 jar(@Transactional支持,JPA异常翻译等)这不是我想要的(至少我想控制它)。基于this帖子,我使用以下解决方案:

<iajc destDir="${module.bin.dir}" showWeaveInfo="true" >
   <inpath>
      <pathelement location="${module.bin.dir}" />
   </inpath>
   <classpath>
      <path refid="module.classpath" />
   </classpath>
   <aspectpath refid="module.classpath" />
   <inxml> <!-- this is the important part -->
      <fileset dir="${module.src.dir}">
         <include name="aop-ctw.xml"/>
      </fileset>
   </inxml>
</iajc>

aop-ctw.xml驻留在源目录中:

<?xml version="1.0"?>
<aspectj>
   <aspect name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/>
<!-- Now, I don't want these:
    <aspect name="org.springframework.transaction.aspectj.AnnotationTransactionAspect"/>
    <aspect name="org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect"/>
-->
</aspectj>

如果找不到aop-ctw.xmliajc符合标准行为:编织所有可用方面。