【问题标题】:Maven downloads corrupted jarMaven 下载损坏的 jar
【发布时间】:2014-01-02 04:29:33
【问题描述】:

我有一个依赖于以下工件的项目:

  <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 表明它们已损坏。我已尝试关闭杀毒软件,但仍无法正确下载神器。

【问题讨论】:

  • 这里有同样的问题,花了我很多时间。在尝试设置 SrpingBootTest 模式以运行 JPA 集成测试时,许多 hirbater 库和 sping-jdbc jar 都损坏了。 Eclipse 和 maven 插件不会抱怨这个问题。当您尝试让自动完成工作并且自动完成机制开始出现异常时,您会发现存在问题。或者,当您尝试深入某个类时,您会收到 Eclipse 编辑器错误。你会去你的 maven 文件夹,看到文件完全损坏了。我希望 maven 删除 JAR & ReportError
  • 如果您的校验和验证已经警告说存在问题,您应该检查这个 jar 的来源,如果有疑问,只需删除它并重新下载...您是否使用 https 下载?使用存储库管理器?检查是否正在检查校验和?如果校验和错误,我建议构建失败!

标签: java eclipse maven


【解决方案1】:

我遇到了同样的问题,结果证明是因为其中一个存储库返回的是 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>

【讨论】:

  • 是的,我遇到了同样的问题。但是我如何确定我必须删除哪个 repo,如果我需要从该 repo 中依赖我该怎么办???
【解决方案2】:

这是一个网络问题,或者(可能性很小)原始 jar 文件已损坏。

尝试使用不同的http客户端下载原始jar,就像maven一样(它不是最好的)。它显示了实际 jar 的下载 url。

如果它有效,那么一个简单的解决方法是您只需使用有效的 http 客户端下载此 jar 并将其放入您的存储库中的位置。


作为一个长期解决方案,我建议对您的网络环境进行一些测试,并可能对您的 maven 存储库进行完全重新生成。

【讨论】:

  • 只是无法再下载这些 jar,所以我不认为问题出在网络环境中,我使用 m2e 而不是浏览器的不同 http 客户端是什么意思。原jar文件损坏如何解决。我可以更改存储库吗?任何人都可以尝试下载这些依赖项来测试它们。
  • 我建议先在普​​通命令行上构建,然后再从缓存中删除失败的 jar。
【解决方案3】:

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)

【讨论】:

  • 最简单、最干净的解决方案。首先清理整个本地缓存并在 settings.xml 中配置校验和,然后重新构建。 blog.soebes.de/blog/2018/10/13/maven-artifact-checksums-what
  • @khmarbaise 这是一篇很棒的文章 :) 公司有 60 个带有嵌套模块的 repostiore。 ...所以大约 100 pom.xml 。他们也不愿意这样做,因为……这就是他们的想法。但是对于我自己的项目,我会尝试THANK YOU :)
【解决方案4】:

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>

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 1970-01-01
    • 2010-12-25
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多