Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建包含所有Maven依赖项的不可执行JAR文件_Java_Maven - Fatal编程技术网

Java 如何创建包含所有Maven依赖项的不可执行JAR文件

Java 如何创建包含所有Maven依赖项的不可执行JAR文件,java,maven,Java,Maven,我有一个Java项目,它没有主文件,但有很多Maven依赖项 如何创建包含源代码和所需maven依赖项的JAR文件 My pom.xml: 4.0.0 网络通信 网络通信 0.0.1-快照 src maven编译器插件 3.8.1 1.8 1.8 maven汇编插件 带有依赖项的jar org.json json 20210307 您可以使用Maven shade插件或Maven assembly插件来创建这样的JAR 在大多数情况下,应避免使用此类罐子。您为每个使用您的JAR的人创建了一个依

我有一个Java项目,它没有主文件,但有很多Maven依赖项

如何创建包含源代码和所需maven依赖项的JAR文件

My pom.xml:


4.0.0
网络通信
网络通信
0.0.1-快照
src
maven编译器插件
3.8.1
1.8
1.8
maven汇编插件
带有依赖项的jar
org.json
json
20210307

您可以使用Maven shade插件或Maven assembly插件来创建这样的JAR

在大多数情况下,应避免使用此类罐子。您为每个使用您的JAR的人创建了一个依赖地狱,因为Maven无法再管理包含的依赖项,因此与其他依赖项(不是来自您的JAR)的冲突可能变得无法管理


另一方面,这样的胖JAR用处不大,因为Maven或Gradle无论如何都会找到您的可传递依赖项,因此不需要将它们包含在JAR中。

您可以像使用Maven汇编插件一样使用它们

唯一需要更改的是不需要指定主类:


maven汇编插件
带有依赖项的jar
之后,您可以使用
mvncileassembly:single
创建JAR


这将编译您的源代码并创建一个JAR,其中包含编译后的源代码和编译范围内的所有依赖项。

您可以尝试maven shade或assembly插件。@dan1st我如何使用这些插件,因为这些插件不起作用。您能解释一下为什么要创建这样的JAR吗?这通常不会完成。@JFabianMeier我编写了一个使用org.json的API。我通过maven添加了这个依赖项。现在我想在其他项目中使用我的API,因此如果我基本上导出API,JAR只包含我的源代码,而不包含maven依赖项。要使用它们,我需要在我使用API的每个项目中添加maven依赖项。但是我希望将maven依赖项与API源代码一起放在JAR中,这样我就不需要再添加maven依赖项了。Maven会自动找到它们。这是Maven的可传递依赖项解析特性。没有必要在你的项目中打包依赖项。我尝试过,但它看起来对我不起作用。我只得到一个包含maven依赖项的JAR。您可能需要运行
mvn编译程序集:single
,以便在打包之前运行编译。不适用于meAre您的源代码位于
src/main/java
?你能展示你的
pom.xml
吗?是的,我能,我已经编辑了问题并添加了pom.xml。没有我的来源位于
src/