我有一个无法再构建的maven项目:
mvn clean compile
ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project dise_java: Compilation failure: Compilation failure:
[ERROR] /home/jeffemandel/springdise/dise_java/src/main/java/org/jeffmandel/springdise/CSPNonceFilter.java:[1,1] cannot access org.jeffmandel.springdise
[ERROR] ZIP file can't be opened as a file system because an entry has a '.' or '..' element in its name
CSPNonceFilter是第一个遇到的文件,否则没什么特别的,但第一行是:
package org.jeffmandel.springdise;
我已经将JDK和Maven更新到最新版本,删除了~/.m2/资源库,并重新构建了它,但没有成功。迫不及待,我开始注解掉我的POM中的依赖项,并找到了一个可能导致失败的依赖项:
<dependency>
<groupId>org.webjars.npm</groupId>
<artifactId>vega</artifactId>
<version>5.21.0</version>
</dependency>
现在我的POM中有Vega已经有一段时间了,而且它是一个Webjar,所以为什么javac会关心我无法理解。我当然可以解决这个问题,但我已经在这个问题上消磨了一天,我想了解一下。有什么想法吗?
2条答案
按热度按时间qni6mghb1#
几天前,我在Gradle的一个项目中遇到了同样的问题,并得到了解决。虽然不是所有的细节都是完全相同的,但我猜你可能对我也有同样的问题。
TL;DR:可能是因为:1)某些ZIP文件的JDK行为改变,以及2)某些依赖JAR不是标准格式。
我将在下面解释我的问题:
1.错误修复导致的JDK行为更改
JDK在处理包含某些特殊Zip条目的Zip文件时遇到问题;‘’和“..”都是这样的压缩条目。
此JDK发行票证https://bugs.openjdk.java.net/browse/JDK-8251329通过检测此类条目并抛出ZipException修复了该问题。如果您对代码更改感兴趣,下面是提交(如票证中所注解的):https://github.com/openjdk/jdk/commit/3e3051e2ee93142983e9a3edee038e4f7b5ac0f2
注:
此问题也已被反向移植到其他主要JDK版本,如JDK 11/13/15/17/等。因此,对于所有这些主要JDK版本,都有某个次要版本包含此类错误修复的代码,并且在该版本之后的所有次要版本都会有引发异常的行为。
就我的情况而言,我们在尝试从JDK 8升级到JDK 11时首次发现了这样的问题;这可能也解释了为什么您“不能再开始构建”。
1.非“标准”的依赖JAR
通常,在依赖项JAR中不应该存在这样的条目,但有时可能会出错。
对于我来说,它是一个本地导入的javawddx.jar,最初是从https://sourceforge.net/projects/javawddx/下载的,因为它没有发布到maven库中。
(请注意这里有一个‘.’JAR中的目录项。)
我通过删除‘’解决了这个问题。目录并重新压缩JAR文件。
avwztpqn2#
不幸的是,该异常没有告诉您是什么条目导致了它以及在哪个文件中:他们在JDK 19中修复了它,但是,如果您有这个问题,您必须安装它,或者编写您自己的压缩搜索代码。我决定安装JDK 19。这告诉了我位置,所以我能够修复它:
ZipException打开“jcom.jar”:Zip文件不能作为文件系统打开,因为条目“/../mark.mf”有一个‘’。或“..”元素在其名称中