Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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 从插件目录向Docker映像添加JAR_Java_Spring Boot_Docker_Jar_Dockerfile - Fatal编程技术网

Java 从插件目录向Docker映像添加JAR

Java 从插件目录向Docker映像添加JAR,java,spring-boot,docker,jar,dockerfile,Java,Spring Boot,Docker,Jar,Dockerfile,我有一个spring引导应用程序,它包含一个主类。我有如下Docker文件: FROM docker.io/openjdk:11-jre-slim EXPOSE 8082 EXPOSE 8443 ADD target/base-application.jar app.jar ENV JAVA_OPTS="" ENTRYPOINT exec java $JAVA_OPTS -Dspring.profiles.active=prod -jar /app.jar FROM Docker1:0.0.1

我有一个spring引导应用程序,它包含一个主类。我有如下Docker文件:

FROM docker.io/openjdk:11-jre-slim
EXPOSE 8082
EXPOSE 8443
ADD target/base-application.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -Dspring.profiles.active=prod -jar /app.jar
FROM Docker1:0.0.1
EXPOSE 8443
ADD target/child-application.jar child-application.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -Dspring.profiles.active=dev -jar /app.jar
我正在使用此Docker文件创建Docker映像。让我们考虑一下这个DOCKER文件是“代码> DOCK1 < /P> 我有另一个Spring Boot应用程序(没有主类),Docker文件如下:

FROM docker.io/openjdk:11-jre-slim
EXPOSE 8082
EXPOSE 8443
ADD target/base-application.jar app.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -Dspring.profiles.active=prod -jar /app.jar
FROM Docker1:0.0.1
EXPOSE 8443
ADD target/child-application.jar child-application.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -Dspring.profiles.active=dev -jar /app.jar
我正在使用
Docker1
作为第二个应用程序的docker映像的基础映像。我通过运行第二个Docker映像来运行主类
Docker1
。现在有另外两个spring启动项目的jar文件(
messagepack1.jar
&
messagepack2.jar
)。我想在第二张docker图片中加载这些罐子。我正在尝试这样的事情:

FROM Docker1:0.0.1
EXPOSE 8443
COPY src/main/resources/message-packs/messagepack1.jar m1.jar
COPY src/main/resources/message-packs/messagepack2.jar m2.jar
ADD target/child-application.jar child-application.jar
ENV JAVA_OPTS=""
ENTRYPOINT exec java $JAVA_OPTS -Dspring.profiles.active=dev -jar /app.jar

但当我运行第二个Docker映像时,它并没有加载JAR。你能帮我一下吗?

最后,我可以找到这个问题的解决方案:

ADD /src/main/resources/message-packs /external-jars

ENTRYPOINT exec java -cp app.jar -Dloader.path=external-jars/ -Dloader.main=com.example.MainClass org.springframework.boot.loader.PropertiesLauncher

在这里,我将src/main/resources/messagepacks目录中的外部jar添加到Docker映像的“External Jars”文件夹中。然后我使用“java-cp”命令将这些JAR加载到我的应用程序的类路径中。

你说的“不加载JAR”是什么意思?您希望以什么方式加载它们?我怀疑您想在类路径中使用它们,或者?是的@SashaShpota,我想在类路径中使用它们,就像Maven dependency一样。但我们不想使用Maven依赖方法。这是先决条件。我很确定你不需要在Docker级别上解决这个问题。Spring Boot是一个胖jar,就像任何其他依赖项一样,您可以将两个jar打包到app jar中。您的意思是说我应该使用Maven依赖项将外部jar打包到app.jar中吗?我的意思是您需要将依赖项包含到类路径中(不管您使用什么工具)。使用Docker图像进行此操作感觉很奇怪。但是你没有提供足够的信息来理解你想要什么,所以我们只能猜测。