2015-10-05 210 views
3

我想在Gradle项目中使用AspectJ(它不是一个Android项目 - 只是一个简单的Java应用程序)。AspectJ + Gradle配置

这里是我的build.gradle看起来像:

apply plugin: 'java' 

buildscript { 
    repositories { 
     maven { 
      url "https://maven.eveoh.nl/content/repositories/releases" 
     } 
    } 
    dependencies { 
     classpath "nl.eveoh:gradle-aspectj:1.6" 
    } 
} 

repositories { 
    mavenCentral() 
} 

project.ext { 
    aspectjVersion = "1.8.2" 
} 

apply plugin: 'aspectj' 

dependencies { 
    //aspectj dependencies 
    aspectpath "org.aspectj:aspectjtools:${aspectjVersion}" 
    compile "org.aspectj:aspectjrt:${aspectjVersion}" 
} 

代码编译,然而方面似乎没有被编织。什么可能是错的?

回答

4

我一直在努力这一段时间,所以这个配置我使用和运作良好。

在您的配置中执行此操作。

configurations { 
    ajc 
    aspects 
    aspectCompile 
    compile{ 
     extendsFrom aspects 
    } 
} 

在您的依赖关系中使用以下配置。如果你不使用spring fwk,则不需要使用Spring依赖。

dependencies { 

    //Dependencies required for aspect compilation 
    ajc "org.aspectj:aspectjtools:$aspectjVersion" 
    aspects "org.springframework:spring-aspects:$springVersion" 
    aspectCompile "org.springframework:spring-tx:$springVersion" 
    aspectCompile "org.springframework:spring-orm:$springVersion" 
    aspectCompile "org.hibernate.javax.persistence:hibernate-jpa-2.1-api:$hibernateJpaVersion" 

} 

compileJava { 
    sourceCompatibility="1.7" 
    targetCompatibility="1.7" 
    //The following two lines are useful if you have queryDSL if not ignore 
    dependsOn generateQueryDSL 
    source generateQueryDSL.destinationDir 

    dependsOn configurations.ajc.getTaskDependencyFromProjectDependency(true, "compileJava") 

    doLast{ 
     ant.taskdef(resource:"org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties", classpath: configurations.ajc.asPath) 
     ant.iajc(source:"1.7", target:"1.7", destDir:sourceSets.main.output.classesDir.absolutePath, maxmem:"512m", fork:"true", 
       aspectPath:configurations.aspects.asPath, 
       sourceRootCopyFilter:"**/.svn/*,**/*.java",classpath:configurations.compile.asPath){ 
      sourceroots{ 
       sourceSets.main.java.srcDirs.each{ 
        pathelement(location:it.absolutePath) 
       } 
      } 
     } 
    } 
} 

我不使用我用的是蚂蚁和AspectJ编译器做插件,可能会有一个简单的方法

1

只是想为Archie提到的AspectJ添加所谓的“官方”插件。

下面是关于如何做到这一点的gradle一些脚本示例:

apply plugin: 'java' 



sourceCompatibility = '1.8' 
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' 

if (!hasProperty('mainClass')) { 
    ext.mainClass = 'com.aspectz.Main' 
} 
buildscript { 
    repositories { 
    maven { 
     url "https://plugins.gradle.org/m2/" 
    } 
    } 
    dependencies { 
    classpath "gradle.plugin.aspectj:gradle-aspectj:0.1.6" 
    //classpath "gradle.plugin.aspectj:plugin:0.1.1" 
    //classpath "gradle.plugin.aspectj:gradle-aspectj:0.1.1" 
    } 
} 


ext { 
    aspectjVersion = '1.8.5' 
} 

apply plugin: "aspectj.gradle" 


repositories { 
    mavenCentral() 
} 

dependencies { 

    testCompile group: 'junit', name: 'junit', version: '4.10' 
    compile("log4j:log4j:1.2.16") 
    compile("org.slf4j:slf4j-api:1.7.21") 
    compile("org.slf4j:slf4j-log4j12:1.7.21") 
    compile("org.aspectj:aspectjrt:1.8.5") 
    compile("org.aspectj:aspectjweaver:1.8.5") 


} 

但是,它似乎只支持Java 8及以上。因为当你使用Java 7来建立它时,它得到错误:

java.lang.UnsupportedClassVersionError: aspectj/AspectJGradlePlugin : Unsupported major.minor version 52.0