我只是想在我的插口插件项目中加入JGIT.当我编译时,它会给我一个关于重叠资源的错误,并生成一个不可用的插件,除非我删除下面两个文件:

Manifest

[WARNING] CrucialPlugin-1.0.jar, JavaEWAH-1.1.13.jar, org.eclipse.jgit-6.1.0.202203080745-r.jar, slf4j-api-1.7.30.jar define 1 overlapping resource: 
[WARNING]   - META-INF/MANIFEST.MF

此外,即使Spigot已经下载,有时它也会开始try 从JGIT下载它!

[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------------< me:CrucialPlugin >--------------------------
[INFO] Building CrucialPlugin 1.0
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from jgit-repository: https://repo.eclipse.org/content/groups/releases/org/spigotmc/spigot-api/1.18.2-R0.1-SNAPSHOT/maven-metadata.xml

pom.xml

有人知道如何解决这些问题,让它在建成后立即工作吗?

推荐答案

您正在使用maven shade插件复制某些依赖项的内容,并将其作为自己的工件包含到生成的工件中.问题是,META-INF目录中的文件通常特定于它们分发的原始jar文件,并且它们的命名非常标准,因此多个jar包含名为MANIFEST的文件也就不足为奇了.MF.

这就是关于重叠资源的警告的原因——这本身对您的目的是无害的.但是,如果打包到JGIT META-INF中的剩余文件存在问题,请排除它们.

此配置将防止从项目中包含的任何依赖项复制META-INF:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/**</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>

或者,如果插件规范要求您包含自己的 list .MF,你可以创建这样一个:

                    <configuration>
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/**</exclude>
                                </excludes>
                            </filter>
                        </filters>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <manifestEntries>
                                    <Title>this is a title</Title>
                                    <Some-Field-Name>some value</Some-Field-Name>
                                </manifestEntries>
                            </transformer>
                        </transformers>
                    </configuration>

另外,关于问题的最后一部分——你的项目依赖于版本中的spigot-api,后缀为SNAPSHOT,这意味着开发人员可以随时更新这个版本,而无需更改编号.为了让maven知道是否有更新的版本,它必须查看存储库列表,并询问每个存储库是否有更新的工件.

在repositories部分中有3个repo,您可能希望禁用对快照更新的判断,如下所示:

<repositories>
    <repository>
        <id>spigotmc-repo</id>
        <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
    </repository>
    <repository>
        <id>sonatype</id>
        <url>https://oss.sonatype.org/content/groups/public/</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
    <repository>
        <id>jgit-repository</id>
        <url>https://repo.eclipse.org/content/groups/releases/</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

不过,你不应该在spigotmc-repo天内禁用此功能,并且希望每天都能判断此repo的更新,除非你 Select 一个非快照版本,该版本一旦发布并下载到你的电脑上,就永远不需要更新.

Java相关问答推荐

无法运行Java(已解决)

表格栏上的事件过滤器在PFA中不起作用

RDX触发ChoiceBox转换器(并按字符串值排序)

如何审查Java dtos中的自定义注释字段?

如何使用Java API在Oracle ODI中运行模拟?

参数值[...]与预期类型java.util.Date不匹配

neo4j java驱动程序是否会在错误发生时自动回滚事务?

给定Java枚举类,通过值查找枚举

Kotlin内联互操作:强制装箱

如何使用值中包含与号的查询参数创建一个java.net.URI

返回响应时,CamelCase命名约定不起作用

测试何时使用Mockito强制转换对象会导致ClassCastException

使用Jolt将字段转换为列表

如何将Pane的图像快照保存为BMP?

有没有可能在时间范围内得到多种解决方案?

try 使用Spring集成和MySQL实现发件箱模式时,锁定等待超时

Oj算法 MatrixR032从字符串、归一化和余弦相似度计算创建

向Java进程发送`kill-11`会引发NullPointerException吗?

持续时间--为什么在秒为负数的情况下还要做额外的工作?

如何在右击时 Select 新行?