You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven发布至Nexus失败:Zip文件无法包含自身

解决Maven发布至Nexus时"A zip file cannot include itself"报错问题

你在通过Jenkins发布Maven项目到Nexus时碰到的这个报错,本质是打包过程出现了循环嵌套——生成的jar包被意外塞进了要打包的归档文件里,而Zip格式不允许这种自包含的情况。结合你的POM配置,我找到了关键问题点和修复方案:

问题根源分析

看你的<build>配置,有两处核心错误导致了这个问题:

  1. 主资源目录指向构建输出目录:你把${project.build.directory}(也就是target目录)设为了主资源目录,而target里包含了maven-assembly-plugin生成的jar-with-dependencies包。当maven-source-plugin打包源码时,会把target下的所有文件(包括已经生成的jar)都塞进源码包,自然触发了"zip不能包含自己"的错误。
  2. 测试资源目录同样指向target:把target作为测试资源目录也不合理,这会让测试阶段误引入构建产物,可能引发其他潜在问题。

具体修复步骤

1. 修正主资源目录配置

删除<build>下错误的<resources>配置,替换为标准的资源目录配置(如果需要保留自定义资源处理,基于src/main/resources调整即可):

<build>
    <!-- 替换原来错误的resources配置 -->
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
        </resource>
    </resources>
    <!-- 其他原有配置保持不变 -->
</build>

你的maven-resources-plugin已经通过copy-resources把不同环境的配置文件复制到target了,完全不需要再把target设为资源目录——Maven默认会把src/main/resources的内容打包进主jar。

2. 修正测试资源目录

把<testResources>指向标准的测试资源目录:

<build>
    <testResources>
        <testResource>
            <directory>src/test/resources</directory>
        </testResource>
    </testResources>
    <!-- 其他原有配置保持不变 -->
</build>

3. 升级maven-assembly-plugin版本

你当前使用的maven-assembly-plugin版本是2.1,这个版本比较老旧,建议升级到较新的稳定版本(比如3.3.0),可以避免一些已知的打包问题:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.mains.MainClass</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

修复原理说明

target目录是Maven的构建输出目录,专门用来存放编译后的class文件、生成的jar包等产物。如果把它加入到资源目录中,Maven在执行打包(包括源码包、主jar包)时会递归打包target下的所有内容,这就会把已经生成的jar包再次打包进去,形成"zip包含自身"的循环,触发报错。修正后,资源目录只包含源码目录下的原始资源,不会引入构建产物,就能彻底避免这个问题。

内容的提问来源于stack exchange,提问作者mohd shoaib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:36:59