我有一个依赖于以下工件的项目:
<dependency>
<groupId>com.jaspersoft.jasperserver</groupId>
<artifactId>jasperserver-common-ws</artifactId>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>com.jaspersoft.jaspersoft.api.metadata</groupId>
<artifactId>jasperserver-api-metadata</artifactId>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>com.jaspersoft.jasperserver</groupId>
<artifactId>jasperserver-ireport-plugin</artifactId>
<version>3.7.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.0.1</version>
</dependency>
当我跑步时
maven install eclipse
输出一个警告,指明校验和验证失败。当我尝试使用winrar打开已安装的jar时,win-rar表示它们已损坏。我试图关闭防病毒软件,但工件仍然无法正常下载。
答案 0 :(得分:4)
我遇到了同样的问题,原来是因为其中一个存储库正在返回HTML而不是jar文件。当我在Notepad ++中查看损坏的jar时,这一点变得明显。在我的情况下从pom中删除以下repo修复了问题:
<repository>
<id>sibboleth</id>
<name>Sibboleth</name>
<url>http://shibboleth.internet2.edu/downloads/maven2/</url>
<layout>default</layout>
</repository>
答案 1 :(得分:1)
这是一个网络问题,或者(原因很少)原始jar文件已损坏。
尝试使用不同的http客户端下载原始jar,就像maven一样(它不是最好的)。它显示了实际罐子的下载URL。
如果它有效,那么一个简单的解决方法是你只需使用一个正常工作的http客户端下载这个jar并将它放到你的存储库中。
作为一个长期解决方案,我建议对您的网络环境进行一些测试,并且可能完全重新生成您的maven存储库。
答案 2 :(得分:0)
Deploying Maven project throws java.util.zip.ZipException: invalid LOC header (bad signature)
这是一个用Java编写的小型检测器,只需复制并运行:)
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.JarFile;
import java.util.stream.Collectors;
public class JarValidator {
public static void main(String[] args) throws IOException {
Path repositoryPath = Paths.get("C:\\Users\\goxr3plus\\.m2");
// Check if the main Repository Exists
if (Files.exists(repositoryPath)) {
// Create a class instance
JarValidator jv = new JarValidator();
List<String> jarReport = new ArrayList<>();
jarReport.add("Repository to process: " + repositoryPath.toString());
// Get all the directory files
List<Path> jarFiles = jv.getFiles(repositoryPath, ".jar");
jarReport.add("Number of jars to process: " + jarFiles.size());
jarReport.addAll(jv.openJars(jarFiles, true));
// Print the report
jarReport.stream().forEach(System.out::println);
} else {
System.out.println("Repository path " + repositoryPath + " does not exist.");
}
}
/**
* Get all the files from the given directory matching the specified extension
*
* @param filePath Absolute File Path
* @param fileExtension File extension
* @return A list of all the files contained in the directory
* @throws IOException
*/
private List<Path> getFiles(Path filePath, String fileExtension) throws IOException {
return Files.walk(filePath).filter(p -> p.toString().endsWith(fileExtension)).collect(Collectors.toList());
}
/**
* Try to open all the jar files
*
* @param jarFiles
* @return A List of Messages for Corrupted Jars
*/
private List<String> openJars(List<Path> jarFiles, boolean showOkayJars) {
int[] badJars = { 0 };
List<String> messages = new ArrayList<>();
// For Each Jar
jarFiles.forEach(path -> {
try (JarFile file = new JarFile(path.toFile())) {
if (showOkayJars)
messages.add("OK : " + path.toString());
} catch (IOException ex) {
messages.add(path.toAbsolutePath() + " threw exception: " + ex.toString());
badJars[0]++;
}
});
messages.add("Total bad jars = " + badJars[0]);
return messages;
}
}
输出
Repository to process: C:\Users\goxr3plus\.m2
Number of jars to process: 4920
C:\Users\goxr3plus\.m2\repository\bouncycastle\isoparser-1.1.18.jar threw exception: java.util.zip.ZipException: zip END header not found
Total bad jars = 1
BUILD SUCCESSFUL (total time: 2 seconds)
答案 3 :(得分:0)
Maven偶尔会下载损坏的文件。在这种情况下,您只能找到文件,将其删除,然后让Maven重新下载。
这只是解决方法。解决方案是将失败添加到Maven设置文件中的存储库配置:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<!--...-->
<profiles>
<profile>
<!--...-->
<repositories>
<repository>
<id>codehausSnapshots</id>
<name>Codehaus Snapshots</name>
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<url>
<!--...-->
</url>
</repository>
</repositories>
<pluginRepositories>
<!--...-->
</pluginRepositories>
<!--...-->
</profile>
</profiles>
<!--...-->
</settings>