当前位置: 首页 > 知识库问答 >
问题:

maven-jar-plugin生成带有错误manifest.mf的jar

汪德寿
2023-03-14

我想生成一个包含其依赖项的jar文件。下面是我的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>vehicle</artifactId>
        <groupId>org</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>vehicle.cli</artifactId>

    <dependencies>
        <dependency>
            <groupId>org</groupId>
            <artifactId>vehicle.model</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/libs
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>libs/</classpathPrefix>
                            <mainClass>
                                org.vehicle.cli.Main
                            </mainClass>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
- target
   - libs
     - vehicle.model-0.0.1-SNAPSHOT.jar
     - commons-cli-1.4.jar
   - vehicle.cli-0.0.1-SNAPSHOT.jar
Manifest-Version: 1.0
Created-By: Maven Jar Plugin 3.2.0
Build-Jdk-Spec: 16
Class-Path: . libs/vehicle.model-0.0.1-20210203.101620-3.jar libs/commons-cli-1.4.jar
Specification-Title: vehicle.cli
Specification-Version: 0.0
Implementation-Title: vehicle.cli
Implementation-Version: 0.0.1-SNAPSHOT
Main-Class: org.vehicle.cli.Main

共有1个答案

孟绪
2023-03-14

我们以前也遇到过这样的事情。jar插件报告了一个未修复的bug。幸运的是,有一个变通办法。在jar插件中调整清单,如下所示:

<archive>
    <manifest>
        <addClasspath>true</addClasspath>
        <classpathPrefix>libs/</classpathPrefix>
        <mainClass>org.vehicle.cli.Main</mainClass>
        <useUniqueVersions>false</useUniqueVersions>   <!-- important! -->
    </manifest>
    <manifestEntries>
        <Class-Path>.</Class-Path>
    </manifestEntries>
</archive>

如果这还不够,依赖项插件还有一个类似的 属性可以启用。

 类似资料:
  • 但是只有带有编译类的jar包含在zip中。为什么它不包括使用maven-sources-plugin构建的sources jar?

  • 我有一个wab-web应用程序包(osgi),我需要我的自定义清单。在互联网上,我找到了一个解决方案——我们创建src/main/Resources/META-INF/MANIFEST.MF并在pom中: 但是当我在最终战争中这样使用时,我有两个MANIFEST.MF /META-INF/MANIFEST.MF /WEB-INF/类/META-INF/MANIFEST.MF 我发现的这个问题的解决

  • 使用Maven生成JavaDoc时,我收到一条错误消息“错误获取链接:”,指的是一个文件javadoc-bundle-选项。其中包含带有目录的javadocResourcesDirectory。即使我创建了那个目录,我仍然会得到相同的错误。如何更正错误?

  • 因此,在尝试运行应用程序时会发生错误。如果我手动将.jar文件中的清单替换为我的清单,那么一切都可以正常工作。我能做些什么来解决这个问题吗? 我将库保存在一个单独的/lib目录中,它们作为提取目录添加到jar工件的根中,IntelliJ IDEA是V13.0.1。

  • 我的pom.xml, 当我在“Netbeans”中使用maven进行构建时,这很好用。 但如果我在EclipseLuna中使用,它会产生如下错误:; 目标组织的执行默认值。jvnet。jaxb2。maven2:maven-jaxb2-plugin:0.12.3:generate失败:执行org时缺少必需的类。jvnet。jaxb2。maven2:maven-jaxb2-plugin:0.12.3: