不能在Java gradle项目中使用我的Manifold扩展方法



我正在做一个Java 11项目,

这是我的build.gradle:
plugins {
id 'java'
}
//
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
repositories {
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
}
dependencies {
implementation 'org.projectlombok:lombok:1.18.18'
implementation "io.vavr:vavr:0.10.3"
compileOnly 'org.projectlombok:lombok:1.18.20'
annotationProcessor 'org.projectlombok:lombok:1.18.20'
implementation 'systems.manifold:manifold-science:2021.1.25-SNAPSHOT'
testCompileOnly 'org.projectlombok:lombok:1.18.20'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
testAnnotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess'
testImplementation 'org.junit.jupiter:junit-jupiter-engine'
}
test {
useJUnitPlatform()
testLogging {
events "passed", "skipped", "failed"
}
}

My Manifold's extension method:

import manifold.ext.rt.api.Extension;
import manifold.ext.rt.api.This;
@Extension
public class MyStringEx {
public static void echo(@This String thiz) {
System.out.println(thiz);
}
}

编译成功。但是现在,我想通过流形扩展注释向java.lang.String类添加一个方法,我试过了:

public class Main {
public static void main(String[] args) {
"hello".echo(); // Add your own methods to String!
}
}

但是我得到错误:

java: cannot find symbol
symbol:   method echo()
location: class java.lang.String

查看Gradle安装文档中的流形科学。你的依赖项应该是:

implementation 'systems.manifold:manifold-science:2021.1.25'
annotationProcessor 'systems.manifold:manifold-ext:2021.1.25'

还需要为歧管添加编译器参数:

if (JavaVersion.current() != JavaVersion.VERSION_1_8 &&
sourceSets.main.allJava.files.any {it.name == "module-info.java"}) {
tasks.withType(JavaCompile) {
// if you DO define a module-info.java file:
options.compilerArgs += ['-Xplugin:Manifold', '--module-path', it.classpath.asPath]
}
} else {
tasks.withType(JavaCompile) {
// If you DO NOT define a module-info.java file:
options.compilerArgs += ['-Xplugin:Manifold']
}
}

另外,扩展类的包必须遵循这里记录的约定。基本上,类的限定名附加在"extensions"包上。如果您使用的是Java模块,那么包应该使用模块的名称进行限定。例如,

package mymodule.extensions.java.lang.String;

首先,您可以尝试上面提到的答案。但是如果你正在使用IntelliJ IDEA,那么一个更简单的解决方案可能是:

Ctrl+Alt+S打开IDE设置->插件→搜索mainfold ->安装它->创建一个新的扩展类->输入你想扩展的类->创建并完成你的工作。

相关内容

  • 没有找到相关文章

最新更新