Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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/2/spring/11.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时运行JarLauncher_Java_Spring_Spring Boot - Fatal编程技术网

Java 在提取jar时运行JarLauncher

Java 在提取jar时运行JarLauncher,java,spring,spring-boot,Java,Spring,Spring Boot,我正在使用spring boot构建一个胖罐子,胖罐子使用 java -jar app.jar 问题是我正在使用docker,我想扩展jar内容以获得更好的可用性,我执行以下操作来提取: unzip app.jar 现在,我使用以下命令运行jar: java -cp "." org/springframework/boot/loader/JarLauncher 我得到以下错误: Exception encountered during context initiali

我正在使用spring boot构建一个胖罐子,胖罐子使用

java -jar app.jar
问题是我正在使用docker,我想扩展jar内容以获得更好的可用性,我执行以下操作来提取:

unzip app.jar
现在,我使用以下命令运行jar:

java -cp "." org/springframework/boot/loader/JarLauncher
我得到以下错误:

 Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jaxRsServer' defined in class path resource 
所以它找不到我的bean,尽管它已配置:

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
@ImportResource("classpath:spring/beans_context.xml")
public class SpringBootJaxrsApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootJaxrsApplication.class, args);
    }

}
beans_context.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />


<import resource="classpath:META-INF/spring/*_context.xml"/>

您使用的是哪个Spring启动版本?自2.3.0以来,一种新的分层模式可用于包装脂肪罐。启用分层模式后,就可以执行类似的操作来构建Docker映像

FROM adoptopenjdk:11-jre-hotspot as builder
WORKDIR application
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

FROM adoptopenjdk:11-jre-hotspot
WORKDIR application
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/resources/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
注意,命令是
java org.springframework.boot.loader.JarLauncher

这个例子在Spring博客中有详细的解释。 有关SpringBoot2.3中分层工作原理的更多信息,您可以再次从Spring博客中参考

相反,如果您使用的是较旧版本的Spring Boot,则可以构建Dockerfile,如本文所述。在本例中,入口点将是
java-cp-app:app/lib/*hello.Application

FROM openjdk:8-jdk-alpine
RUN addgroup -S spring && adduser -S spring -G spring
USER spring:spring
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","hello.Application"]

我手头上没有答案,但是你能扩展一下需要提取jar的用例吗?谢谢你的答案,但这仍然没有回答为什么我的方法不起作用,我与jar有相同的层次结构和相同的类路径,为什么我的bean没有被识别?