2015-10-05 161 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