java - TrueZip:NoClassDefFoundError(但仅用于关闭 Hook ?)

标签 java maven phantomjs truezip

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

      <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>

我得到这个错误:

[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 ):

<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>

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

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

此外,

$ 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

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

最佳答案

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

关于java - TrueZip:NoClassDefFoundError(但仅用于关闭 Hook ?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31267536/

相关文章:

java - 有没有办法在 iText7 中的文本之前保留空格?

java - 我无法输入逻辑代码来在动态文本字段中输入引脚号。使用 Selenium Webdriver Java

java - g选择:如何从一个列表中提取值并从另一个列表中显示选项?

java - 在 dataproc 上运行的 java 软件中升级 google-cloud 库后,库发生冲突

java - 增加tomcat7 maven插件的内存?

javascript - 如何在不打开浏览器的情况下在服务器中运行 Slimmerjs?

java - 如何正确解决 Hudson 和 ant 的部署权限问题?

java - AspectJ @DeclareParents defaultImpl 代码在用作依赖项时不使用

javascript - 在 phantomjs 中解析发布数据

javascript - 如何使用 CasperJS 与自定义选择框交互?