首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Java gradle项目中使用我的Manifold扩展方法

无法在Java gradle项目中使用我的Manifold扩展方法
EN

Stack Overflow用户
提问于 2021-10-09 17:15:45
回答 2查看 80关注 0票数 0

我正在做一个Java 11项目,

这是我的build.gradle:

代码语言:javascript
复制
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"
    }
}

我的流形的扩展方法:

代码语言:javascript
复制
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类添加一个方法,我已经尝试过了:

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        "hello".echo(); // Add your own methods to String!
    }
}

但我得到了错误:

代码语言:javascript
复制
java: cannot find symbol
  symbol:   method echo()
  location: class java.lang.String
EN

回答 2

Stack Overflow用户

发布于 2021-10-09 18:33:08

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

Ctrl+Alt+S打开集成开发环境设置->插件->搜索mainfold -> Install it ->创建一个新的扩展类->键入要扩展的类->创建并在其中执行您的工作。

票数 0
EN

Stack Overflow用户

发布于 2021-10-10 01:56:14

请参阅Gradle Setup文档了解多重科学。您的依赖项应该是:

代码语言:javascript
复制
implementation 'systems.manifold:manifold-science:2021.1.25'
annotationProcessor 'systems.manifold:manifold-ext:2021.1.25'

此外,您还需要为Manifold添加编译器参数:

代码语言:javascript
复制
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']
    }
}

此外,扩展类的包必须遵循约定documented here。基本上,类的限定名称附加在“扩展”包上。如果您使用的是Java模块,那么包应该使用模块的名称进行限定。例如,

代码语言:javascript
复制
package mymodule.extensions.java.lang.String;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69509002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档