简体   繁体   English

尝试运行 PGDSpider 时出现 java.lang.NoClassDefFoundError

[英]java.lang.NoClassDefFoundError while trying to run PGDSpider

I am trying to run the bioinformatics software PGDSpider .我正在尝试运行生物信息学软件PGDSpider Installation instructions are pretty straightforward:安装说明非常简单:

  1. Installing the Java7 RE.安装 Java7 RE。
  2. Downloading the PGDSpider application.下载 PGDSpider 应用程序。
  3. Executing the command bash./PGDSpider2.sh .执行命令bash./PGDSpider2.sh

However when I try to execute the program an error appears related to Java that I don't quite understand:但是,当我尝试执行程序时,出现与 Java 相关的错误,我不太明白:

luis@luis-Inspiron-5570:PGDSpider_2.1.1.5$ bash PGDSpider2.sh
java.lang.NoClassDefFoundError: org/w3c/dom/ls/DocumentLS
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:821)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:861)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:773)
    at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:901)
    at ch.unibe.iee.cmpg.pgdspider.PGDSpider.main(PGDSpider.java:17)
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.ls.DocumentLS
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 15 more

I am working on Ubuntu 20.04 and have the following version of Java:我正在研究 Ubuntu 20.04 并拥有以下版本的 Java:

(bioinfo) luis@luis-Inspiron-5570:PGDSpider_2.1.1.5$ java -version
openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+7-Ubuntu-1ubuntu1)
OpenJDK 64-Bit Server VM (build 14.0.1+7-Ubuntu-1ubuntu1, mixed mode, sharing)

Any help will be pretty much appreciated.任何帮助将不胜感激。

I'm not familiar with PGDSpider, so you're going to have to do some fiddling about in the PGDSpider2.sh script, but you should see a line that reads something akin to:我对 PGDSpider 不熟悉,因此您将不得不在PGDSpider2.sh脚本中进行一些摆弄,但您应该会看到类似于以下内容的行:

java PGDSpider2.jar

That line should be changed to the following:该行应更改为以下内容:

java --add-modules java.se.ee -jar PGDSpider2.jar

Again, my fix may not be perfect, so feel free to add comments which might provide more insight (such as the exact text of PGDSpider2.sh ).同样,我的修复可能并不完美,因此请随意添加可能提供更多见解的评论(例如PGDSpider2.sh的确切文本)。 The latest versions of Java SDK no longer include certain Java EE modules by default, and it looks like your tool was built when those modules were included.默认情况下,最新版本的 Java SDK 不再包含某些 Java EE 模块,看起来您的工具是在包含这些模块时构建的。 The strategy here is just to make them available again.这里的策略只是让它们再次可用。

Error was solved by following the next steps:通过以下步骤解决了错误:

  1. Downgrading Java to Java 8:将 Java 降级为 Java 8:

sudo apt-get install openjdk-8-jre

  1. Manually switching to this older version of java:手动切换到这个旧版本的 java:
(bioinfo) luis@luis-Inspiron-5570:PGDSpider_2.1.1.5$ sudo update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-14-openjdk-amd64/bin/java      1411      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
  2            /usr/lib/jvm/java-14-openjdk-amd64/bin/java      1411      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press <enter> to keep the current choice[*], or type selection number: 3

  1. Executing PGDSpider2 script执行 PGDSpider2 脚本

bash PGDSpider2.sh

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM