android - 在 android 应用程序中运行 gradle 插件时无法加载类“org.aspectj.bridge.MessageHandler”
问题描述
我正在使用aspectjtools
并aspectjrt
为 android - Bernoulli 创建一个 AOP 库。图书馆按预期工作。
然后我决定创建自己的插件来向最终用户隐藏以下内容 -
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'
}
但是当我运行它时,我得到了这个错误 -
Unable to load class 'org.aspectj.bridge.MessageHandler'.
This is an unexpected error. Please file a bug containing the idea.log file.
我的日志记录告诉我,这发生在javaCompile.doLast
我的插件代码部分,我无法理解为什么会发生这种情况。
- 我认为这可以与 Java 版本相关联,但我在所有项目和模块中都明确使用版本 8。
- 然后我认为这可能是一个 Gradle 问题,但我在我的库和新项目中都使用了最新的(和相同的版本)。
由于我的库正常工作,但我的插件没有,我很确定我在某个地方搞砸了我的插件设置。
解决方案
推荐阅读
- typescript - 确定联合接口使用的接口
- java - SAXON - XPST0017:找不到匹配的 1 参数函数,名为
- cmake - 带有外部工具链的 Buildroot 的 CMake 工具链文件
- android - Kotlin 布局 ID 显示两个导入
- node.js - Vue + 后端 - 使用 Laravel 或学习 NodeJS
- c# - 在 VSTO PowerPoint 中创建地图
- javascript - 等待加载时的 Java 脚本事件
- node.js - Mongoose:find 后无法填充以进行 $near 查询
- react-native - 在滚动触发之前,某些项目不会显示在 SectionList 中
- mysql - 如何仅更新表中的一行但带有 ID 号