Java 带有打包依赖项的Maven构建jar

Java 带有打包依赖项的Maven构建jar,java,maven,executable-jar,maven-assembly-plugin,maven-shade-plugin,Java,Maven,Executable Jar,Maven Assembly Plugin,Maven Shade Plugin,我在构建一个可运行的jar(包含我所需的所有依赖项)时遇到问题。我可以构建一个包含所有依赖项的JAR,它可以工作,但速度非常慢(我使用Eclipse导出构建它)。我尝试使用maven汇编插件 <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive>

我在构建一个可运行的jar(包含我所需的所有依赖项)时遇到问题。我可以构建一个包含所有依赖项的JAR,它可以工作,但速度非常慢(我使用Eclipse导出构建它)。我尝试使用maven汇编插件

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
            <archive>
                <manifest>
                    <mainClass>${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>

maven汇编插件
${mainClass}
带有依赖项的jar
组装
包裹
单一的
这将创建一个包含所有未打包依赖项的Jar。问题是,当我运行结果jar时,它会抛出一个错误(我在代码中得到一个null指针异常,这似乎是由其中一个包含的库中的工厂类返回null引起的)


问题似乎是,当一个依赖jar被取消打包以包含到我的jar中时,出现了一些错误(因此出现了错误)。我想把那个罐子打包好,但仍然把它放在我的可运行的罐子里


有没有一种方法可以选择性地包括包装好的罐子(或者包括所有包装好的罐子)?

我不知道,如果我理解正确的话

  • 你所有的罐子都不会被打开
  • 您可以使用onejar插件创建一个嵌入了所有jar的jar

org.apache.maven.plugins
maven依赖插件
2.10
com.joira
onejar maven插件
1.4.4
${mainclass}
真的
${project.artifactId}-${project.version}-jar与依赖项。${project.packaging}
一罐
  • 可以在依赖项部分排除JAR

...
...
...
...
...

我不知道,如果我理解正确的话

  • 你所有的罐子都不会被打开
  • 您可以使用onejar插件创建一个嵌入了所有jar的jar

org.apache.maven.plugins
maven依赖插件
2.10
com.joira
onejar maven插件
1.4.4
${mainclass}
真的
${project.artifactId}-${project.version}-jar与依赖项。${project.packaging}
一罐
  • 可以在依赖项部分排除JAR

...
...
...
...
...

或者您可以排除不需要的罐子?您想在打包(所有依赖项包)时排除其中一个依赖项jar,但不想将其从pom中排除?也可以进行选择性包含:问题似乎是,当其中一个依赖项jar未打包以包含到我的jar中时,出现了问题(因此出现了错误)。我想把那个罐子打包好,但仍然放在我的可运行的罐子里,或者你可以排除不需要的罐子?您想在打包(所有依赖项包)时排除其中一个依赖项jar,但不想将其从pom中排除?也可以进行选择性包含:问题似乎是,当其中一个依赖项jar未打包以包含到我的jar中时,出现了问题(因此出现了错误)。我想把这个jar打包好,但它仍然在我的可运行jar中。我避免使用一个jar,因为自2012年以来它似乎就不受支持。我的看法错了吗?是的,你是对的。另一种选择(不是真的)是使用带有描述符的汇编插件(参见上面的第一个链接)。但这需要一些东西来加载类\jar,因为
类路径
不指向jar中的jar。我避免使用一个jar,因为自2012年以来它似乎不受支持。我的看法错了吗?是的,你是对的。另一种选择(不是真的)是使用带有描述符的汇编插件(参见上面的第一个链接)。但是这需要加载类\jar,因为
类路径
不指向jar中的jar。
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.10</version>
            </plugin>

            <plugin>
                <groupId>com.jolira</groupId>
                <artifactId>onejar-maven-plugin</artifactId>
                <version>1.4.4</version>
                <executions>
                    <execution>
                        <configuration>
                            <mainClass>${mainclass}</mainClass>
                            <attachToBuild>true</attachToBuild>
                            <filename>${project.artifactId}-${project.version}-jar-with-dependencies.${project.packaging}</filename>
                        </configuration>
                        <goals>
                            <goal>one-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        <dependency>
            <groupId>...</groupId>
            <artifactId>...</artifactId>
            <version>...</version>
            <exclusions>
                <exclusion>
                    <groupId>...</groupId>
                    <artifactId>...</artifactId>
                </exclusion>
            </exclusions>