diff --git a/README.md b/README.md index 1e19b50..cae9317 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,9 @@ doing the weaving on the weaving over already compiled classes. It is particular } apply plugin: 'com.github.sedovalx.gradle-aspectj-binary' - - `weaveClasses` task becomes available after that. It makes sense to add it as a dependency for the `classes` task + + `weaveClasses` task becomes available after that. By default, if the `java` plugin is not disabled via + configuration (see below), there are pre-configured tasks dependencies: weaveClasses.dependsOn compileJava classes.dependsOn weaveClasses @@ -37,19 +38,30 @@ doing the weaving on the weaving over already compiled classes. It is particular > You need to weave both aspects and classes where aspects should be applied. So if you have aspect classes in a project A and classes to be weaved in a project B you should add the `weaveClasses` task to the build - process of both projects. + process of both projects. See the `examples` project for details. ### Available configuration - For now the `weaceClasses` task can be configured with the next parameters + The plugins can be configured with the following parameters - weaveClasses { - source = '1.7' - target = '1.7' - writeToLog = true + aspectjBinary { + applyJavaPlugin = true + weaveClasses { + ajcSourceSets = [project.sourceSets.main] + outputDir = project.file(...) + source = '1.7' + target = '1.7' + writeToLog = true + } } Parameters: + - `applyJavaPlugin` should the `java` plugin be applied with the `aspectjBinary` plugin. By default, it is applied but + in some cases, for example Android projects, it is not desired. WARN: in this case, you **must** provide the `ajcSourceSets` + and the `outputDir` property values by yourself as there is no default configuration for Android projects (any help is appreciated). + - `ajcSourceSets` is a set of Gradle source sets to be weaved. By default, it includes the `main` source set only. + Both `compileClasspath` and `runtimeClasspath` collections are extracted from each source set. + - `outputDir` is a folder where the weaved classes are copied. By default, it is `build/classes/java/main`. - `source` has '1.7' as default value and is passed as it is to the [ajc](http://www.eclipse.org/aspectj/doc/next/devguide/ajc-ref.html) compiler parameter - `target` has '1.7' as default value and is passed as it is to the [ajc](http://www.eclipse.org/aspectj/doc/next/devguide/ajc-ref.html) compiler parameter - `writeToLog` has `false` as a default value and defines if ajc's compile messages should diff --git a/build.gradle b/build.gradle index 6c3f18d..3c0110d 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,6 @@ buildscript { } repositories { - mavenLocal() mavenCentral() jcenter() } diff --git a/examples/README.md b/examples/README.md index 9d6b86c..d1cb0dc 100644 --- a/examples/README.md +++ b/examples/README.md @@ -7,7 +7,7 @@ It expects `1.0-SNAPSHOT` version of the plugin in the local Maven repository or Run - ./gradlew clean run + ./gradlew clean :examples:app:run to see the result. Probably you will see something similar to this: @@ -21,13 +21,13 @@ to see the result. Probably you will see something similar to this: Hello Kotlin Jcabi aspect: - [main] WARN com.github.sedovalx.sandbox.gradle.aspectj.example.App - java.lang.RuntimeException: I'm very quiet - at com.github.sedovalx.sandbox.gradle.aspectj.example.App.jcabiExample_aroundBody2(App.java:24) - at com.github.sedovalx.sandbox.gradle.aspectj.example.App$AjcClosure3.run(App.java:1) + [main] WARN com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects.App - java.lang.RuntimeException: I'm very quiet + at com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects.App.jcabiExample_aroundBody2(App.java:24) + at com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects.App$AjcClosure3.run(App.java:1) at org.aspectj.runtime.reflect.JoinPointImpl.proceed(JoinPointImpl.java:149) at com.jcabi.aspects.aj.QuietExceptionsLogger.wrap(QuietExceptionsLogger.java:83) - at com.github.sedovalx.sandbox.gradle.aspectj.example.App.jcabiExample(App.java:24) - at com.github.sedovalx.sandbox.gradle.aspectj.example.App.main(App.java:37) + at com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects.App.jcabiExample(App.java:24) + at com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects.App.main(App.java:37) > You have to use AspectJ annotations to describe aspects. @@ -43,8 +43,5 @@ You don't need all this tricky things in your application. Just add this to the } apply plugin: 'com.github.sedovalx.gradle-aspectj-binary' - - weaveClasses.dependsOn compileJava - classes.dependsOn weaveClasses to the project you want to weave during the build. \ No newline at end of file diff --git a/examples/app/build.gradle b/examples/app/build.gradle new file mode 100644 index 0000000..86ce7a3 --- /dev/null +++ b/examples/app/build.gradle @@ -0,0 +1,29 @@ +buildscript { + repositories { + mavenLocal() + jcenter() + } + + dependencies { + classpath "com.github.sedovalx.gradle:gradle-aspectj-binary:$pluginVersion" + } +} + +dependencies { + compile project(":examples:aspects") +} + +apply plugin: 'application' +apply plugin: 'com.github.sedovalx.gradle-aspectj-binary' + +mainClassName = 'com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects.App' + +aspectjBinary { + applyJavaPlugin = true + weaveClasses { + source = "1.7" + target = "1.7" + ajcSourceSets = [project.sourceSets.main] + writeToLog = true + } +} \ No newline at end of file diff --git a/examples/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/example/App.java b/examples/app/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/App.java similarity index 81% rename from examples/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/example/App.java rename to examples/app/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/App.java index 84c9c9b..4397770 100644 --- a/examples/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/example/App.java +++ b/examples/app/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/App.java @@ -1,7 +1,5 @@ -package com.github.sedovalx.sandbox.gradle.aspectj.example; +package com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects; -import com.github.sedovalx.sandbox.gradle.aspectj.example.aspects.JavaAnnotation; -import com.github.sedovalx.sandbox.gradle.aspectj.example.aspects.KotlinAnnotation; import com.jcabi.aspects.Quietly; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/examples/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/KotlinAnnotation.kt b/examples/app/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/KotlinAnnotation.kt similarity index 73% rename from examples/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/KotlinAnnotation.kt rename to examples/app/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/KotlinAnnotation.kt index e7f2551..c6e16a1 100644 --- a/examples/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/KotlinAnnotation.kt +++ b/examples/app/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/KotlinAnnotation.kt @@ -1,4 +1,5 @@ -package com.github.sedovalx.sandbox.gradle.aspectj.example.aspects +package com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects + @Retention(AnnotationRetention.RUNTIME) @Target(AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER) annotation class KotlinAnnotation(val value: String) diff --git a/examples/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/KotlinAspect.kt b/examples/app/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/KotlinAspect.kt similarity index 89% rename from examples/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/KotlinAspect.kt rename to examples/app/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/KotlinAspect.kt index ea6a400..b3d3072 100644 --- a/examples/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/KotlinAspect.kt +++ b/examples/app/src/main/kotlin/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/KotlinAspect.kt @@ -1,4 +1,4 @@ -package com.github.sedovalx.sandbox.gradle.aspectj.example.aspects +package com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects import org.aspectj.lang.ProceedingJoinPoint import org.aspectj.lang.annotation.Around diff --git a/examples/aspects/build.gradle b/examples/aspects/build.gradle new file mode 100644 index 0000000..8056e69 --- /dev/null +++ b/examples/aspects/build.gradle @@ -0,0 +1,19 @@ +buildscript { + repositories { + mavenLocal() + jcenter() + } + + dependencies { + classpath "com.github.sedovalx.gradle:gradle-aspectj-binary:$pluginVersion" + } +} + +apply plugin: 'com.github.sedovalx.gradle-aspectj-binary' + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + compile "org.aspectj:aspectjrt:$aspectjVersion" + compile 'com.jcabi:jcabi-aspects:0.22.6' + compile 'org.slf4j:slf4j-simple:1.7.21' +} \ No newline at end of file diff --git a/examples/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/JavaAnnotation.java b/examples/aspects/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/JavaAnnotation.java similarity index 81% rename from examples/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/JavaAnnotation.java rename to examples/aspects/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/JavaAnnotation.java index 9bb9045..a535437 100644 --- a/examples/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/JavaAnnotation.java +++ b/examples/aspects/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/JavaAnnotation.java @@ -1,4 +1,4 @@ -package com.github.sedovalx.sandbox.gradle.aspectj.example.aspects; +package com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/examples/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/JavaAspect.java b/examples/aspects/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/JavaAspect.java similarity index 83% rename from examples/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/JavaAspect.java rename to examples/aspects/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/JavaAspect.java index a4d7e9f..e0ac4a3 100644 --- a/examples/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/example/aspects/JavaAspect.java +++ b/examples/aspects/src/main/java/com/github/sedovalx/sandbox/gradle/aspectj/examples/aspects/JavaAspect.java @@ -1,4 +1,4 @@ -package com.github.sedovalx.sandbox.gradle.aspectj.example.aspects; +package com.github.sedovalx.sandbox.gradle.aspectj.examples.aspects; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; diff --git a/examples/build.gradle b/examples/build.gradle index 2559720..8a11cf0 100644 --- a/examples/build.gradle +++ b/examples/build.gradle @@ -1,37 +1,2 @@ -buildscript { - repositories { - mavenLocal() - mavenCentral() - jcenter() - } - - dependencies { - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath "com.github.sedovalx.gradle:gradle-aspectj-binary:$pluginVersion" - } -} - group 'com.github.sedovalx.sandbox.gradle.aspectj.example' -version '1.0-SNAPSHOT' - -apply plugin: 'application' -apply plugin: 'com.github.sedovalx.gradle-aspectj-binary' - -aspectjBinary { - applyJavaPlugin = true - weaveClasses { - source = "1.8" - target = "1.8" - ajcSourceSets = [project.sourceSets.main] - writeToLog = true - } -} - -mainClassName = "com.github.sedovalx.sandbox.gradle.aspectj.example.App" - -dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - compile "org.aspectj:aspectjrt:$aspectjVersion" - compile 'com.jcabi:jcabi-aspects:0.22.6' - compile 'org.slf4j:slf4j-simple:1.7.21' -} \ No newline at end of file +version '1.0-SNAPSHOT' \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 6045a05..ba263d6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -include 'plugin', 'examples' +include 'plugin', 'examples', 'examples:aspects', 'examples:app'