Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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 如何使用jar内外的依赖项jar创建可执行jar(intellij)_Java_Intellij Idea_Jar - Fatal编程技术网

Java 如何使用jar内外的依赖项jar创建可执行jar(intellij)

Java 如何使用jar内外的依赖项jar创建可执行jar(intellij),java,intellij-idea,jar,Java,Intellij Idea,Jar,我在将项目构建到可执行jar中时遇到了一些小问题。我在项目中使用了大约20个不同的外部库,但其中一个库是提供者(bcprov-jdk15on.jar)。我可以成功地提取我的项目jar中的所有其他库,这样结果就是一个jar。但是,当我试图提取提供者库时,该过程将破坏(删除)库上的签名,JVM会给我一个JNI错误。因此,我想创建一个jar,在最后一个jar中包含19个其他库,然后在可执行文件旁边的/lib文件夹中创建bcprov-jdk15on.jar。因此,层次结构将如下所示: myproject

我在将项目构建到可执行jar中时遇到了一些小问题。我在项目中使用了大约20个不同的外部库,但其中一个库是提供者(bcprov-jdk15on.jar)。我可以成功地提取我的项目jar中的所有其他库,这样结果就是一个jar。但是,当我试图提取提供者库时,该过程将破坏(删除)库上的签名,JVM会给我一个JNI错误。因此,我想创建一个jar,在最后一个jar中包含19个其他库,然后在可执行文件旁边的/lib文件夹中创建bcprov-jdk15on.jar。因此,层次结构将如下所示:

myproject.jar  
lib  
 |_bcprov-jdk15on.jar  

我使用的是IntelliJ IDEA 2016.1.1,而工件选项似乎没有提供这种特定的功能。我可以创建一个jar,它要么在jar旁边的a/lib文件夹中包含所有库,要么在jar中提取所有库,但我似乎无法使中间解决方案起作用。当我构建类型为“Other”的工件时,我可以定义想要的结构,但是我不能为这个工件定义主类,这意味着我不能从终端运行它。甚至可以使用UI构建这种工件吗?或者我必须为此进行某种maven或ant构建吗?深入了解如何实现这一目标将非常有帮助。如果有什么重要的事情我没有在这里提及,请随时询问更多细节。提前谢谢

如果您可以使用Maven,请查看Maven Shade插件。通过将其与良好的配置结合使用,“package”命令将创建一个shaded.jar,其中包含所有libs/依赖项(如果需要)。我可以肯定地使用Maven,但现在我想知道IntelliJ是否为此提供了某种内置功能。如果有人说IntelliJ绝对不可能做到这一点,而我必须使用一些插件来实现这一特定目的,那么我当然没有其他选择。