gpt4 book ai didi

kotlin - Kotlin 1.1.1与1.2.30和AspectJ

转载 作者:行者123 更新时间:2023-12-02 13:09:20 25 4
gpt4 key购买 nike

我正在尝试将Kotlin 1.2.30与AspectJ一起使用(使用以下AspectJ gradle插件:github repo,与作者没有任何隶属关系)。我的构建gradle似乎适用于较旧的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


在Kotlin 1.2.30(或我尝试过的1.2分支中的其他任何情况)的情况下,将打印“foo”,好像该方面不起作用。
在更新Kotlin版本的情况下,我该如何解决该问题?

最佳答案

问题的原因是kotlin 1.1.1将kotlin类放入build/classes/java,而kotlin 1.2.30将.class文件编译到build/classes/kotlin。我使用的AspectJ gradle pluginsourceSets.main.output.classesDir目录读取编织的.class文件,该目录默认情况下设置为build/classes/java,并且我的项目中没有文件。我认为插件作者应更改其代码以改为使用sourceSets.main.output.classesDirs,这允许许多.class输出目录,这在polyglot项目中尤其重要。

尽管如此,我还是通过将sourceSets.main.output.classesDir=sourceSets.main.output.classesDir.toString().replace("java", "kotlin")行添加到我的build.gradle中来解决了1.2.30 kotlin不兼容的问题

关于kotlin - Kotlin 1.1.1与1.2.30和AspectJ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50768832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com