【问题标题】:Unable to generate a single jar file with dependencies in maven无法在maven中生成具有依赖关系的单个jar文件
【发布时间】:2015-11-26 20:24:36
【问题描述】:

要求:生成一个带有依赖关系的jar文件,并给jar文件一个cutsom名称。

我的问题是我只需要生成一个带有依赖关系的jar文件,我不需要默认生成的jar文件。当我“mvn clean install”时,我得到两个名称为 jar 文件的结果: FPMWebDocumentation-0.0.1.jar, FPMWebDocu.jar

我不想生成FPMWebDocumentation-0.0.1.jar文件,我只需要生成FPMWebDocu.jar。如果我删除了构建节点之外的 groupId、artifactId、版本,则会出现“groupId”缺失、“artifactId”缺失等错误。 现在,如果我从当前位置删除 groupId 和版本并将其放入插件节点内,它仍然会给出与上面相同的缺失错误。

下面是我的 pom.xml:

<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">
<modelVersion>4.0.0</modelVersion>

<groupId>com.fraunhofer.latexDocumentation</groupId>
<artifactId>FPMWebDocumentation</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>

<name>FPMWebDocumentation</name>
<url>http://maven.apache.org</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <id>jar-with-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.fraunhofer.latexDocumentation.MainClass</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <finalName>FPMWebDocu</finalName>
                        <appendAssemblyId>false</appendAssemblyId>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.8.3</version>
    </dependency>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>18.0</version>
    </dependency>
</dependencies>
</project>

【问题讨论】:

    标签: java xml eclipse maven jar


    【解决方案1】:

    如果没有特别的顾虑,就留下FPMWebDocumentation-0.0.1.jar。该文件实际上是项目本身的主要工件。您的 FPMWebDocu.jar 实际上是正在生成的“额外”JAR。

    请让我们知道您对在那里拥有主要工件有什么顾虑,可能可以通过其他解决方案解决


    如果我没记错的话,maven-shade-plugin 的默认行为是使用阴影 JAR 作为项目的主要工件。看看here 看看如何通过 shade 插件制作一个 uber JAR

    (但是,将 uber-jar 作为主要工件通常是个坏主意,因为如果使用 uber-jar 作为依赖项,它会破坏依赖项管理机制)

    【讨论】:

    • Adrian Shum 我无法让你清楚这个问题,我已经编辑了它,现在应该更清楚了,谢谢。
    • 您更新没有区别:FPMWebDocumentation-0.0.1.jar 不仅是正在生成的“默认”,它还是项目的主要工件。 FPMWebDocu.jar 只是一个由程序集插件生成的额外 JAR。在那里拥有主要工件对您有什么问题?告诉我们您的实际问题,让我们为您提供解决方案
    • 有像stackoverflow.com/questions/2188746/… 这样的丑陋黑客,但我认为没有充分理由制作这样不可维护的 POM 是不值得的
    • 在需求中,我需要生成一个具有自定义名称的依赖项的 jar 文件,如果默认 jar 文件包含依赖项并具有自定义名称,那就太好了。如果这在默认 jar 中是不可能的,那么我只需要生成额外的 JAR。
    • 它现在所做的已经符合您的要求:它确实会生成一个具有自定义名称的 uber-jar。至少根据我的理解,要求不是要求您只生成 1 个并且只生成 1 个 uber-jar。如果同一目录下的 2 个 JAR 让您感到不舒服,只需将 uber-jar 放在另一个目录中,例如 target/uber-jar
    猜你喜欢
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2018-11-03
    • 1970-01-01
    • 2019-09-03
    • 2015-09-19
    相关资源
    最近更新 更多