首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TrueZip: NoClassDefFoundError (但仅用于关闭钩子?)

TrueZip: NoClassDefFoundError (但仅用于关闭钩子?)
EN

Stack Overflow用户
提问于 2015-07-07 19:38:35
回答 3查看 1.1K关注 0票数 2

我有一个使用PhantomJS的项目。有一个插件会自动安装它:

代码语言:javascript
复制
      <plugin>
        <groupId>com.github.klieber</groupId>
        <artifactId>phantomjs-maven-plugin</artifactId>
        <version>0.2.1</version>
        <executions>
          <execution>
            <goals>
              <goal>install</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <version>1.9.2</version>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.18.1</version>
        <configuration>
          <systemPropertyVariables>
            <phantomjs.binary>${phantomjs.binary}</phantomjs.binary>
          </systemPropertyVariables>
        </configuration>
      </plugin>

我得到了这个错误:

代码语言:javascript
复制
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17.665 s
[INFO] Finished at: 2015-07-07T13:27:39+02:00
[INFO] Final Memory: 31M/175M
[INFO] ------------------------------------------------------------------------
java.lang.NoClassDefFoundError: de/schlichtherle/truezip/fs/FsSyncOptions
    at de.schlichtherle.truezip.fs.FsSyncShutdownHook$Hook.run(FsSyncShutdownHook.java:93)
Caused by: java.lang.ClassNotFoundException: de.schlichtherle.truezip.fs.FsSyncOptions
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)
    ... 1 more

添加这些(根据this thread):

代码语言:javascript
复制
<dependency>
  <!-- For the PhantomJS install plugin -->
  <groupId>de.schlichtherle.truezip</groupId>
  <artifactId>truezip-driver-file</artifactId>
  <version>7.7.9</version>
</dependency>
<dependency>
  <!-- For the PhantomJS install plugin -->
  <groupId>de.schlichtherle.truezip</groupId>
  <artifactId>truezip-kernel</artifactId>
  <version>7.7.9</version>
</dependency>
<dependency>
  <!-- For the PhantomJS install plugin -->
  <groupId>de.schlichtherle.truezip</groupId>
  <artifactId>truezip-driver-zip</artifactId>
  <version>7.7.9</version>
</dependency>

没有帮助(我得到相同的错误消息)。

但是:二进制文件确实会被下载并解压缩。系统属性被设置。依赖于此工作的测试运行得很好。

另外,

代码语言:javascript
复制
$ mvn dependency:tree | grep truezip
[INFO] +- de.schlichtherle.truezip:truezip-driver-file:jar:7.7.9:compile
[INFO] +- de.schlichtherle.truezip:truezip-kernel:jar:7.7.9:compile
[INFO] +- de.schlichtherle.truezip:truezip-driver-zip:jar:7.7.9:compile
[INFO] |  +- de.schlichtherle.truezip:truezip-swing:jar:7.7.9:compile

..。所以只包含一个版本。

EN

回答 3

Stack Overflow用户

发布于 2015-07-07 21:08:28

我对PhantomJS了解不多,但是正如你所想的那样,异常是由关闭钩子抛出的。这个钩子是一个安全网,它提交TrueZIP对归档文件的任何挂起的更改。您可以通过在JVM终止之前调用de.schlichtherle.truezip.file.TVFS.umount()来轻松地删除它。请将调用包装在Throwable -block中,以确保即使应用程序以Throwable终止也能调用它。

票数 1
EN

Stack Overflow用户

发布于 2015-07-07 19:45:50

如果你通过java -jar执行它,或者你的maven插件调用了一个在所提供的作用域之外的目标,那么将依赖的作用域设置为compile

票数 0
EN

Stack Overflow用户

发布于 2020-10-06 21:17:03

通过将java版本从IBMjava1.7更改为IBMjava1.8 (ibm_sdk_8.0.3.0)或Oraclejava1.8 (jdk_1.8.0.91_64),我解决了这个问题。您可以通过在终端或命令提示符下输入java -version来检查您的java版本。操作系统= windows 10

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31267536

复制
相关文章

相似问题

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