Я пытаюсь использовать Kotlin 1.2.30 с AspectJ (используя следующий плагин Grapect AspectJ: github repo , нет связи с автором).Кажется, мой сборочный билд работает с более старыми версиями kotlin (например, 1.1.1), но не с версиями 1.2.
Я пытаюсь добавить аспекты в следующий файл Main.kt :
package test
fun main (args: Array<String>) {
object {
fun foo () { print("foo")}
}.foo()
}
Мой файл аспекта, AspectTest.kt выглядит следующим образом:
package test
import org.aspectj.lang.ProceedingJoinPoint
import org.aspectj.lang.annotation.Around
import org.aspectj.lang.annotation.Aspect
@Aspect
class AspectTest {
@Around("execution (* *())")
fun around(joinPoint: ProceedingJoinPoint) : Any? {
println("joinpoint")
return joinPoint.proceed();
}
}
Мой build.gradle :
buildscript {
ext.kotlin_version = '1.2.30'
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "com.github.sedovalx.gradle:gradle-aspectj-binary:1.0.25"
}
}
group 'test'
version '1.0-SNAPSHOT'
apply plugin: 'kotlin'
apply plugin: 'application'
apply plugin: 'com.github.sedovalx.gradle-aspectj-binary'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
testCompile group: 'junit', name: 'junit', version: '4.12'
compile ("org.aspectj:aspectjrt:1.9.1")
compile 'org.aspectj:aspectjweaver:1.9.1'
compile 'org.slf4j:slf4j-simple:1.7.21'
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
mainClassName ='test.MainKt'
weaveClasses.dependsOn compileJava
classes.dependsOn weaveClasses
Когда я запускаю код, используя kotlin_version = 1.1.1
, он работает и печатает:
joinpoint
foo
В случае Kotlin1.2.30 (или любая другая в ветке 1.2, которую я пробовал) печатается «foo», как если бы аспект не работал.
Как я могу исправить проблему в случае более новых версий kotlin?