程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用 Gradle 导入库“Symja”才能与 Elasticsearch 服务器模块一起使用?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_696_0@如何解决如何使用 Gradle 导入库“Symja”才能与 Elasticsearch 服务器模块一起使用?? 开发过程中遇到如何使用 Gradle 导入库“Symja”才能与 Elasticsearch 服务器模块一起使用?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用 Gradle 导入库“Symja”才能与 Elasticsearch 服务器模块一起使用?的解决方法建议,希望对你解决如何使用 Gradle 导入库“Symja”才能与 Elasticsearch 服务器模块一起使用?有所启发或帮助;

对于一个项目,我想扩展 Elasticsearch,因此需要使用包 Symja。在 Symja 的 Github 中,提供了一个 manual for the usage with Maven。

由于 Elasticsearch 存储库是使用 Gradle 构建的,因此我还需要使用 Gradle 而不是 Maven。测试 suggested example Symja project,以下 build.gradle(我基本上使用 gradle init 生成并稍作调整)完美地导入了库:

apply plugin: 'java'
apply plugin: 'maven-publish'

repositorIEs {
    mavenLocal()
    maven {
        url = uri('https://oss.sonatype.org/content/repositorIEs/snapshots')
    }
    maven {
        url = uri('https://repo.maven.apache.org/maven2/')
    }
}

dependencIEs {
    implementation 'org.matheclipse:matheclipse-core:1.0.0-SNAPSHOT'
}

publishing {
    publications {
        maven(MavenPublication) {
            from(components.java)
        }
    }
}

现在,我想将 Symja 添加到我的 Elasticsearch fork 到 server 模块中。

但是,当我尝试构建它时,导入

import org.matheclipse.parser.clIEnt.SyntaxError;
import org.matheclipse.parser.clIEnt.math.MathException;
Symja 示例的

未检测到:java: package org.matheclipse.parser.clIEnt does not exist。可能出了什么问题?

我更新后的 build.gradle of the server module 如下所示:

...
apply plugin: 'java'
apply plugin: 'maven-publish'

publishing {
    publications {
        ...
        maven(MavenPublication) {
            from(components.java)
        }
    }
}

repositorIEs {
    mavenLocal()
    maven {
        url = uri('https://oss.sonatype.org/content/repositorIEs/snapshots')
    }
    maven {
        url = uri('https://repo.maven.apache.org/maven2/')
    }
}

...

dependencIEs {
    ...
    // Symja
    implementation "org.matheclipse:matheclipse-core:1.0.0-SNAPSHOT"
    ...
}

...

编辑: 按照@axelclk 的建议添加implementation "org.matheclipse:matheclipse-frontend:1.0.0-SNAPSHOT" 之后,我的IDE 现在可以检测到这些包。然,如果我构建 build.gradle(同时在 org.elasticsearch.index.query.boolqueryBuilder.java 中的方法中包含 Symja 示例),则会出现以下错误:

C:\{path here...}\elasticsearch\server\src\main\java\org\elasticsearch\index\query\BoolqueryBuilder.java:454: error: cAnnot access GcdRingElem
            System.out.println("Out[2]: " + result.toString());
                                                  ^
  class file for edu.jas.structure.GcdRingElem not found
C:\{path here...}\elasticsearch\server\src\main\java\org\elasticsearch\index\query\BoolqueryBuilder.java:459: error: cAnnot access FIEldElement
            System.out.println("Out[3]: " + result.toString());
                                                  ^
  class file for org.hipparchus.FIEldElement not found

似乎不知何故,toString 方法无法正常工作。此外,如果我使用 gradlew run -Dtests.es.xpack.security.enabled=false -Dtests.heap.size=1G 运行 Elasticsearch fork,构建将失败并显示以下输出:

> Configure project :modules:reindex
disabling reindex-from-old tests because we can't get the pID file on windows

> Configure project :plugins:repository-hdfs
hdfsFixture unsupported,please set HADOOP_HOME and put HADOOP_HOME\bin in PATH

> Configure project :x-pack:plugin:searchable-snapshots:qa:hdfs
hdfsFixture unsupported,please set HADOOP_HOME and put HADOOP_HOME\bin in PATH
=======================================
Elasticsearch Build Hamster says Hello!
  Gradle Version        : 6.8
  OS Info               : windows 10 10.0 (amd64)
  JDK Version           : 15 (OraclE)
  JAVA_HOME             : C:\Program files\Java\jdk-15.0.1
  Random TesTing Seed   : C5A79F8CABA0D6FA
  In FIPS 140 mode      : false
=======================================

> Task :server:compileJava
C:\{path here ...}\elasticsearch\server\src\main\java\org\elasticsearch\index\query\BoolqueryBuilder.java:454: error: cAnnot access GcdRingElem
            System.out.println("Out[2]: " + result.toString());
                                                  ^
  class file for edu.jas.structure.GcdRingElem not found
C:\{path here ...}\elasticsearch\server\src\main\java\org\elasticsearch\index\query\BoolqueryBuilder.java:459: error: cAnnot access FIEldElement
            System.out.println("Out[3]: " + result.toString());
                                                  ^
  class file for org.hipparchus.FIEldElement not found
Note: Some input files use or overrIDe a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors

> Task :server:compileJava Failed

FAILURE: Build Failed with an exception.

* what went wrong:
Execution Failed for task ':server:compileJava'.
> Compilation Failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --deBUG option to get more log output. Run with --scan to get full insights.

* Get more Help at https://Help.gradle.org

BUILD Failed in 58s
228 actionable tasks: 8 executed,220 up-to-date

编辑 2:我按照@axelclk 的建议添加了 implementation "org.matheclipse:matheclipse-external:1.0.0-SNAPSHOT" 并将 @H_971_5@mavenLocal() 替换为 @H_971_5@mavenCentral(),这不会导致任何不同的结果。 >

编辑 3: 我再次添加了 - 根据@axelclk 的建议 - pom.xml 和 @H_971_5@matheclipse-external 的 @H_971_5@matheclipse-core 文件描述的实现:

...
  // Symja
  implementation "org.matheclipse:matheclipse-external:1.0.0-SNAPSHOT"
  //implementation "org.apache.logging.log4j:log4j-core:2.13.2"
  //implementation "org.apache.logging.log4j:log4j-API:2.13.2"
  testImplementation "org.slf4j:slf4j-simple:1.7.25"
  implementation "org.slf4j:log4j-over-slf4j:1.7.25"
  //implementation "com.Google.guava:failureaccess:1.0.1"
  //implementation "com.Google.guava:guava:30.1.1-jre"
  implementation "com.fasterxml.jackson.core:jackson-databind:2.11.0"
  implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0"
  implementation "io.pebbletemplates:pebble:3.1.5"
  implementation "org.jheaps:jheaps:0.13"
  implementation "org.antlr:antlr4-runtime:4.8-1"
  implementation "org.apache.commons:commons-text:1.8"
  //testImplementation "junit:junit:4.13.1"

  implementation "org.matheclipse:matheclipse-frontend:1.0.0-SNAPSHOT"

  implementation "org.matheclipse:matheclipse-core:1.0.0-SNAPSHOT"
  implementation "org.commonmark:commonmark:0.17.1"
  implementation "org.commonmark:commonmark-ext-gfm-tables:0.17.1"
  implementation "org.apfloat:apfloat:1.10.0-SNAPSHOT"
  //implementation "org.apache.logging.log4j:log4j-core:2.13.2"
  //implementation "org.apache.logging.log4j:log4j-API:2.13.2"
  //testImplementation "org.slf4j:slf4j-simple:1.7.25"
  //implementation "org.slf4j:log4j-over-slf4j:1.7.25"
  implementation "org.hipparchus:hipparchus-core:1.8"
  implementation "org.hipparchus:hipparchus-clustering:1.8"
  implementation "org.hipparchus:hipparchus-fft:1.8"
  implementation "org.hipparchus:hipparchus-fitTing:1.8"
  implementation "org.hipparchus:hipparchus-ode:1.8"
  implementation "org.hipparchus:hipparchus-optim:1.8"
  implementation "org.hipparchus:hipparchus-stat:1.8"
  //implementation "commons-codec:commons-codec:1.14"
  implementation "org.apache.commons:commons-lang3:3.11"
  implementation "com.Google.code.findBUGs:Jsr305:3.0.0"
  implementation "org.logicng:logicng:2.0.2"
  implementation "org.gavaghan:geodesy:1.1.3"
  implementation "it.unimi.dsi:fastutil:8.5.2"
  implementation "org.codehaus.janino:janino:3.1.3"
  implementation "com.ibm.icu:icu4j:68.2"
  implementation "com.univocity:univocity-parsers:2.8.4"
  testImplementation "org.junit.jupiter:junit-jupiter-API:5.4.2"
  testImplementation "org.junit.jupiter:junit-jupiter-ENGIne:5.4.2"
  testImplementation "org.junit.vintage:junit-vintage-ENGIne:5.4.2"

  //implementation "org.matheclipse:matheclipse-API:1.0.0-SNAPSHOT"
  //implementation "org.matheclipse:matheclipse-io:1.0.0-SNAPSHOT"
  //implementation "org.matheclipse:matheclipse-beakerx:1.0.0-SNAPSHOT"
...

现在,server 构建似乎可以工作了。但是,如果我现在使用 gradlew run -Dtests.es.xpack.security.enabled=false -Dtests.heap.size=1G 运行,则会有不同的任务失败:

> Configure project :modules:reindex
disabling reindex-from-old tests because we can't get the pID file on windows

> Configure project :plugins:repository-hdfs
hdfsFixture unsupported,please set HADOOP_HOME and put HADOOP_HOME\bin in PATH
=======================================
Elasticsearch Build Hamster says Hello!
  Gradle Version        : 6.8
  OS Info               : windows 10 10.0 (amd64)
  JDK Version           : 15 (OraclE)
  JAVA_HOME             : C:\Program files\Java\jdk-15.0.1
  Random TesTing Seed   : 266D7D1003A7C996
  In FIPS 140 mode      : false
=======================================

> Task :modules:kibana:bundlePlugin Failed
> Task :modules:ingest-user-agent:bundlePlugin Failed
> Task :modules:aggs-matrix-stats:bundlePlugin Failed
> Task :modules:ingest-common:bundlePlugin Failed
> Task :modules:lang-mustache:bundlePlugin Failed
> Task :modules:ingest-geoip:bundlePlugin Failed
> Task :modules:analysis-common:bundlePlugin Failed
> Task :modules:geo:bundlePlugin Failed

FAILURE: Build completed with 8 @R_783_4895@.

1: Task Failed with an exception.
-----------
* what went wrong:
...

* Get more Help at https://Help.gradle.org

BUILD Failed in 13s
204 actionable tasks: 9 executed,195 up-to-date

我觉得这很奇怪,因为我没有对 Elasticsearch fork 的这些部分进行任何更改。这里发生了什么?

编辑 4: 在 Elasticsearch 的“jar 地狱”功能出现一些问题后,我设法在 @IanGabes 的帮助下通过将 repositorIEs 添加到根的 { {1}}。 问题是,Symja 类似乎还没有工作。我有一个方法 build.gradle 目前执行以下操作:

normalize

该方法在 private voID normalize(String queryString) { System.out.println("I'm here!"); String eString = ""; ExprEvaluator util = new ExprEvaluator(false,(short) 100); IExpr e; } 调用之前在 Elasticsearch 的 BoolqueryBuilder.doToquery() 中被调用。现在我正在addBooleanClausesPOST。正如预期的那样,有输出 Booleanquery。之后,会发生以下情况:

"I'm here!"

我看不出这几个用于初始化 Symja 类的命令有什么危害。但是当我将它们注释掉时,一切正常,所以问题似乎出在这个地方。 以下依赖项目前包含在 ... ╗ [2021-04-19T22:54:29,779][INFO ][stdout ] [runTask-0] I'm here! ╗ [2021-04-19T20:54:30.497923300Z] [BUILD] StopPing node === Standard error of node `node{::runTask-0}` === ╗ ? last 40 non error or warning messages from C:\{path...}\elasticsearch\build\testclusters\runTask-0\logs\es.stderr.log ? ╗ Fatal error in thread [elasticsearch[runTask-0][search][T#1]],exiTing ╗ @R_502_4126@.NoClassDefFoundError: com/Google/common/util/concurrent/UncheckedTimeoutException ╗ at org.elasticsearch.index.query.boolqueryBuilder.normalize(BoolqueryBuilder.java:440) ╗ at org.elasticsearch.index.query.boolqueryBuilder.doToquery(BoolqueryBuilder.java:332) ╗ at org.elasticsearch.index.query.AbstractqueryBuilder.toquery(AbstractqueryBuilder.java:103) ╗ at org.elasticsearch.index.query.SearchExecutionContext.lambda$toquery$3(SearchExecutionContext.java:464) ╗ at org.elasticsearch.index.query.SearchExecutionContext.toquery(SearchExecutionContext.java:476) ╗ at org.elasticsearch.index.query.SearchExecutionContext.toquery(SearchExecutionContext.java:463) ╗ at org.elasticsearch.search.Searchservice.parsesource(Searchservice.java:912) ╗ at org.elasticsearch.search.Searchservice.createContext(Searchservice.java:750) ╗ at org.elasticsearch.search.Searchservice.executequeryPhase(Searchservice.java:438) ╗ at org.elasticsearch.search.Searchservice$2.lambda$onResponse$0(Searchservice.java:406) ╗ at org.elasticsearch.action.ActionRunnable.lambda$supply$0(ActionRunnable.java:58) ╗ at org.elasticsearch.action.ActionRunnable$2.doRun(ActionRunnable.java:73) ╗ at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ╗ at org.elasticsearch.common.util.concurrent.TimedRunnable.doRun(TimedRunnable.java:44) ╗ at org.elasticsearch.common.util.concurrent.thReadContext$ContextPreservingAbstractRunnable.doRun(thReadContext.java:739) ╗ at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ╗ at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ╗ at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ╗ at java.base/@R_502_4126@.Thread.run(Thread.java:832) ╗ Caused by: java.lang.classnotFoundException: com.Google.common.util.concurrent.UncheckedTimeoutException ╗ at java.base/jdk.internal.loader.builTinClassLoader.loadClass(BuilTinClassLoader.java:606) ╗ at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168) ╗ at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522) ╗ ... 19 more > Task :run Failed FAILURE: Build Failed with an exception. * what went wrong: Execution Failed for task ':run'. > Elasticsearch cluster dIEd * Try: Run with --stacktrace option to get the stack trace. Run with --info or --deBUG option to get more log output. Run with --scan to get full insights. * Get more Help at Help.gradle.org BUILD Failed in 3m 34s 429 actionable tasks: 13 executed,416 up-to-date 中(或者分别注释掉,例如它们与不同模块的其他依赖项发生冲突):

gradle.build
@H_696_0@解决方法

为了完整起见,我想至少包含@axelclk 和@IanGabes 给出的解决方案的一部分。首先,似乎有必要手动添加所有隐式依赖项以及它们源自 to server's build.gradle 的存储库,对应于 pom.xml 文件 of @H_971_5@matheclipse-core 和 of @H_971_5@matheclipse-external:>

...
apply plugin: 'java'
apply plugin: 'maven-publish'

publishing {
    publications {
        ...
        maven(MavenPublication) {
            from(components.java)
        }
    }
}

repositories {
  mavenCentral()
  maven {
    url = uri('https://oss.sonatype.org/content/repositories/snapshots')
  }
  maven {
    url = uri('https://repo.maven.apache.org/maven2/')
  }
}

...

  // Symja
  implementation "org.matheclipse:matheclipse-external:1.0.0-SNAPSHOT"
  //implementation "org.apache.logging.log4j:log4j-core:2.13.2"
  //implementation "org.apache.logging.log4j:log4j-api:2.13.2"
  testImplementation "org.slf4j:slf4j-simple:1.7.25"
  //implementation "org.slf4j:log4j-over-slf4j:1.7.25"
  implementation "com.google.guava:failureaccess:1.0.1"
  //implementation "com.google.guava:guava:30.1.1-jre"
  //implementation "com.fasterxml.jackson.core:jackson-databind:2.11.0"
  implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0"
  implementation "io.pebbletemplates:pebble:3.1.5"
  implementation "org.jheaps:jheaps:0.13"
  //implementation "org.antlr:antlr4-runtime:4.8-1"
  implementation "org.apache.commons:commons-text:1.8"
  //testImplementation "junit:junit:4.13.1"

  implementation "org.matheclipse:matheclipse-frontend:1.0.0-SNAPSHOT"

  implementation "org.matheclipse:matheclipse-core:1.0.0-SNAPSHOT"
  implementation "org.commonmark:commonmark:0.17.1"
  implementation "org.commonmark:commonmark-ext-gfm-tables:0.17.1"
  implementation "org.apfloat:apfloat:1.10.0-SNAPSHOT"
  //implementation "org.apache.logging.log4j:log4j-core:2.13.2"
  //implementation "org.apache.logging.log4j:log4j-api:2.13.2"
  //testImplementation "org.slf4j:slf4j-simple:1.7.25"
  //implementation "org.slf4j:log4j-over-slf4j:1.7.25"
  implementation "org.hipparchus:hipparchus-core:1.8"
  implementation "org.hipparchus:hipparchus-clustering:1.8"
  implementation "org.hipparchus:hipparchus-fft:1.8"
  implementation "org.hipparchus:hipparchus-fitTing:1.8"
  implementation "org.hipparchus:hipparchus-ode:1.8"
  implementation "org.hipparchus:hipparchus-optim:1.8"
  implementation "org.hipparchus:hipparchus-stat:1.8"
  //implementation "commons-codec:commons-codec:1.14"
  implementation "org.apache.commons:commons-lang3:3.11"
  implementation "com.google.code.findbugs:jsr305:3.0.0"
  implementation "org.logicng:logicng:2.0.2"
  implementation "org.gavaghan:geodesy:1.1.3"
  implementation "it.unimi.dsi:fastutil:8.5.2"
  implementation "org.codehaus.janino:janino:3.1.3"
  //implementation "com.ibm.icu:icu4j:68.2"
  implementation "com.univocity:univocity-parsers:2.8.4"
  testImplementation "org.junit.jupiter:junit-jupiter-api:5.4.2"
  testImplementation "org.junit.jupiter:junit-jupiter-ENGIne:5.4.2"
  testImplementation "org.junit.vintage:junit-vintage-ENGIne:5.4.2"
...

不过,如上面的代码所示,一些依赖项被注释掉了。这是因为 Elasticsearch 有一个功能会因为 jar Hell 而引发构建错误,此时构建的其他部分已经使用了特定依赖项的另一个版本。

此外,由于 server 包依赖于其父包,因此需要将存储库添加到 subprojects environment of elasticsearch's build.gradle 中:

...
subprojects {
  ...
  repositories {
    mavenCentral()
    maven {
      url = uri('https://oss.sonatype.org/content/repositories/snapshots')
    }
    maven {
      url = uri('https://repo.maven.apache.org/maven2/')
    }
  }
}
...

完成此操作后,当将示例添加到 server 模块内的现有 Elasticsearch 类时,会在我的 IDE(对我而言:IntelliJ IDEA)中检测到 Symja 示例的包。 (就我而言,我在包含 org.elasticsearch.index.query.boolQueryBuilder 的 Symja example 中调用了一个方法)。

如果我尝试使用例如构建/运行所有内容gradlew run -Dtests.es.xpack.security.enabled=false -Dtests.heap.size=1G 从我的 Elasticsearch 根目录开始,一切都完美地构建。也可以使用 PUT... 创建文档。在我的情况下,尝试运行 Boolean query (然后使用 Symja 调用添加的方法)更像是一个问题。在这种情况下,Elasticsearch 立即崩溃并显示以下输出:

...
╗ [2021-04-22T08:34:21.178673600Z] [BUILD] Stopping node

=== Standard error of node `node{::runTask-0}` ===
╗   ? last 40 non error or warning messages from C:\...\elasticsearch\build\testclusters\runTask-0\logs\es.stderr.log ?
╗ fatal error in thread [elasticsearch[runTask-0][search][T#1]],exiTing
╗  java.lang.NoClassDefFoundError: com/google/common/util/concurrent/UncheckedTimeoutException
...

> Task :run FAILED

FAILURE: Build failed with an exception.

* what went wrong:
Execution failed for task ':run'.
> Elasticsearch cluster died

...

BUILD FAILED in 7m 37s
429 actionable tasks: 19 executed,410 up-to-date

是因为 Symja 在运行时依赖于 Guava 包的存在,需要从 build.gradle 中注释掉。一方面,无法使implementation 选项将 Guava 添加到任何包中,因为 Elasticsearch 在文件 gradle\forbidden-dependencies.gradle 中将其定义为“禁止依赖项”:

// we do not want any of @R_489_8270@ dependencies on the compilation classpath
// because they could then be used within Elasticsearch
List<String> FORBIDDEN_DEPENDENCIES = [
  'guava'
]
...

另一方面,也无法通过 runtimeOnly "com.google.guava:guava:30.1.1-jre" 将其添加到 server 模块。这再次导致由于 jar Hell 导致构建失败,因为 Elasticsearch 的某些测试部分也以这种方式使用 Guava。尝试将版本调整为现有版本也是无效的。

总而言之,将 Symja 内容添加到 Elasticsearch 的 server 模块似乎不可能。在 Elastic Stack 社区中,声明如下:

[...] 您在依赖项等方面面临的问题是尝试向 server 添加内容的结果,如果您构建插件,则不会遇到该问题。

这似乎是最佳做法。我会走这条路,因为无论如何我的目标是创建一个插件。

更新:由于我设法安装了我正在编写的插件,因此使用上述工作流程非常有效(通过 runtimeOnly 包含 Guava 并使用 {{1} } 我的插件)。

大佬总结

以上是大佬教程为你收集整理的如何使用 Gradle 导入库“Symja”才能与 Elasticsearch 服务器模块一起使用?全部内容,希望文章能够帮你解决如何使用 Gradle 导入库“Symja”才能与 Elasticsearch 服务器模块一起使用?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:如何使用