#android #gradle #aspectj
Вопрос:
Я использую aspectjtools
и aspectjrt
создаю библиотеку AOP для Android — Bernoulli. Библиотека работает так, как ожидалось.
Затем я решил создать свой собственный плагин, чтобы скрыть следующее от моего конечного пользователя —
final def variants = project.android.applicationVariants
variants.all { variant ->
variant.javaCompile.doLast {
String[] args = ["-showWeaveInfo",
"-1.5",
"-inpath", javaCompile.destinationDir.toString(),
"-aspectpath", javaCompile.classpath.asPath,
"-d", javaCompile.destinationDir.toString(),
"-classpath", javaCompile.classpath.asPath,
"-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]
new Main().run(args, new MessageHandler(true));
}
}
Значение build.gradle
плагина —
plugins {
id 'signing'
id 'maven-publish'
id 'kotlin'
}
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
dependencies {
implementation gradleApi()
implementation localGroovy()
implementation 'com.android.tools.build:gradle:4.1.3'
api 'org.aspectj:aspectjrt:1.9.6'
api 'org.aspectj:aspectjtools:1.9.6'
}
task sourceJar(type: Jar) {
classifier = 'sources'
from sourceSets.main.allSource
}
publishing {
publications {
"$project.name"(MavenPublication) {
artifact "$buildDir/libs/$project.name-" ARTIFACT_VERSION_NAME ".jar"
}
}
}
Код компилируется, создается jar, и я могу опубликовать его mavenLocal
.
Затем, когда я использую его в своем новом проекте, он может обнаружить плагин и не выдает ошибок сборки. Вот build.gradle
описание проекта —
plugins {
id 'com.android.application'
}
// being fetched from mavenLocal
apply plugin: 'com.yugankasharan.bernoulli'
android {
compileSdkVersion 30
buildToolsVersion "30.0.2"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
lintOptions {
abortOnError false
}
}
dependencies {
// some android dependencies
// my Bernoulli library, being fetched from mavenCentral
implementation 'com.yugankasharan.bernoulli:bernoulli:0.2.1'
}
But when I run it, I get this error —
Unable to load class 'org.aspectj.bridge.MessageHandler'.
This is an unexpected error. Please file a bug containing the idea.log file.
My logging has told me that this is happening in the javaCompile.doLast
section of my plugin code, and I am unable to understand why this should happen.
- I thought this could be linked with the Java version, but i’m explicitly using version 8 in all my projects and modules.
- I then thought this could be a Gradle issue but i’m using the latest (and same versions) in both my library and new project.
Since my library is properly working, but my plugin isn’t, I’m pretty sure I’ve messed up my plugin setup somewhere.