运行Standalone Jar需要在服务器上添加jar才能运行

时间:2018-02-14 17:22:36

标签: java spring spring-boot

我创建了一个Spring启动作业,它依赖于服务器上的属性,我可以让它像这样运行,没有修改清单。

/ bin / java -Dspring.config.location = / var / tmp / com.jdbc.properties -jar my.jar

它有效。但是应用程序依赖于另一个jar,它是一个内部jar,它位于/usr/local/share/jni/foo.jar下,我想添加到这个混合中。

我尝试了无数次尝试以下操作: java -cp /usr/local/share/jni/foo.jar -Dspring(拾取原始行)

当我开始谷歌这个时,它带我进行神奇的跑步之旅: ' org.springframework.boot.loader.JarLauncher' 要么 ' org.springframework.boot.loader.PropertiesLauncher' 然后捣乱清单等。

花了4个小时没有成功。是否有最佳实践来运行需要使用远程属性文件和其他jar文件的独立jar?如果可能,请保持简单。

3 个答案:

答案 0 :(得分:1)

如果您正在使用Spring Boot并希望拥有一个封装所有依赖项的Fat-jar,最好的方法是将所需的Jar添加为项目的依赖项。

假设您正在使用Maven来构建项目,那么" foo.jar"需要作为Maven依赖项添加到您的项目中。然后,spring Boot maven插件将拿起jar并将其包含在你的Fat-jar中。

即使" foo.jar"在任何Maven仓库中都不存在,您仍然可以使用Maven命令mvn install:install-file(See Maven doc)手动将其手动添加到本地Maven仓库。

答案 1 :(得分:0)

您是否尝试在{maven / gradle依赖项中使用foo.jar作为provided依赖项并将项目构建为可执行war文件?

请参阅构建可执行war文件的spring boot's maven plugin说明。

答案 2 :(得分:0)

总体。在Linux服务器上运行spring boot standalone jar。另外,从服务器上的静态文件中读取数据库属性,在jar文件中读取添加仅存在于服务器上的功能的路径。不能包含在启动库中。

命令行运行(将转换为shell)并运行。 /path/to/..openjdk-1.7.0.55.x86_64/bin/java -cp /usr/somewhere/jni/Foo.jar:/path/where/lib/MYBOOTJAR.jar org.springframework.boot.loader.JarLauncher --spring.config.location=/path/to/properties/on/server/com.xxx.yyy.zzz.jdbc.properties

似乎使用JarLauncher(没有修改清单,除了从本地排除Foo.jar)

希望这有助于其他人。