如何在类路径上使用额外文件运行Spring Boot应用程序而不修改应用程序(xxx.jar)

时间:2017-10-05 09:51:51

标签: java spring-boot classpath

我想运行一个Spring Boot应用程序,在类路径上有一个额外的文件(恰好是一个css)。我无法触摸jar(应用程序本身)。我只能修改启动脚本。

我收到了应用程序::

的启动脚本
#! /bin/sh
commandline="java -jar xxx-1.0.0.jar"
commandline="$commandline --spring.config.location=../config/xxx.properties"
commandline="$commandline --logging.config=../config/log4j2.xml"
$commandline

我天真的第一次尝试是使用-cp添加文件夹并将文件放入该文件夹。但是这不起作用,因为-cp和-jar不兼容(这里很好的解释:Differences between "java -cp" and "java -jar"?

然后我找到了使用PropertiesLauncher + loader.path的建议,这可以看作是命令行(https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html#executable-jar-property-launcher-features)上类路径的替代品。但是,要使用PropertiesLauncher,示例建议修改pom,我不能这样做(Spring Boot: Is it possible to use external application.properties files in arbitrary directories with a fat jar?

我可以做的是修改shell脚本。

我应该如何(如果可能的话)将额外文件放在类路径上而不修改Spring Boot应用程序?

2 个答案:

答案 0 :(得分:3)

这对我也有用:

#! /bin/sh
commandline="java -cp ../css:xxx-1.0.0.jar org.springframework.boot.loader.JarLauncher"
commandline="$commandline --Spring.config.location=../config/xxx.properties"
commandline="$commandline --logging.config=../config/log4j2.xml"
$commandline

在我的情况下,这似乎比使用PropertiesLauncher更简单。

答案 1 :(得分:1)

我发现这篇文章,它展示了如何在不修改应用程序的情况下使用PropertiesLauncher(不修改pom.xml): https://mash213.wordpress.com/2017/01/05/hack-how-2-add-jars-2-springboot-classpath-with-jarlauncher/

因此,通过上面的内容,我可以在类路径中添加一个额外的文件夹,它确实有效:

#! /bin/sh
commandline="java -Dloader.path=../css -cp xxx-1.0.0.jar org.springframework.boot.loader.PropertiesLauncher"
commandline="$commandline --spring.config.location=../config/xxx.properties"
commandline="$commandline --logging.config=../config/log4j2.xml"
$commandline