【发布时间】:2018-08-30 01:24:15
【问题描述】:
我目前正在尝试以旧方式将 Spring Boot 应用程序容器化。我想使用 maven 命令构建我的项目,将 jar(及其依赖项)复制到容器并使用嵌入式 Tomcat 运行 Jar。
到目前为止,我已经编写了一个 maven 配置文件来编译我的代码并构建一个 jar。 jar 中包含所有依赖项 jar。完美的!
当我尝试通过 cli 手动运行 jar 时,会发生不幸的事情。 CLI 抱怨缺少依赖项 jar,但在解压缩并挖掘父 jar 本身后,情况似乎并非如此。
请允许我进一步分解:
这是我的 Maven 个人资料:
<profile>
<id>docker</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<packaging.type>jar</packaging.type>
<log.dir>logs</log.dir>
<!-- updates bootstrap.properties -->
<config.override.path>./conf</config.override.path> <!-- "file:" cannot be used with relative path (not a valid URI, y'all) -->
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</profile>
这是我用来运行构建的 Jar 的命令:
java -jar target/the-jar-1.0.0-SNAPSHOT.jar
最后,这是错误:
java.io.FileNotFoundException: target/the-jar-1.0.0-SNAPSHOT.jar!/BOOT-INF/lib/the-missing-jar-1.0.0-SNAPSHOT.jar (No such file or directory)
我解压了“the-jar”只是为了在正确的位置找到“the-missing-jar”。不仅如此,当我在 IDE (IntelliJ) 中启动父 Jar 时,它也能正常工作。
这里有什么我遗漏的吗?我应该采用不同的方法吗?我觉得我现在离退出太近了。
更新: 在几个人的推荐下,我改变了我的构建配置文件。虽然我同意这是一种更好的方法,但它并没有改变结果。在尝试执行 uber jar 时,我仍然遇到关于未找到 jar 的相同的特定错误。
<profile>
<id>docker</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<packaging.type>jar</packaging.type>
<log.dir>logs</log.dir>
<!-- updates bootstrap.properties -->
<config.override.path>./conf</config.override.path> <!-- "file:" cannot be used with relative path (not a valid URI, y'all) -->
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
【问题讨论】:
-
不要使用
maven-assembly-plugin使用spring-boot-maven-plugin,它可以满足您的一切需求。所以基本上你采取了错误的方法。 Spring Boot 期望类文件位于特殊目录中,您的方法将生成错误类型的文件。 -
我在问题中添加了我的更新。这种方法并没有改变结果。还有什么我可以测试的吗?
-
为什么
spring-boot-maven-plugin应该只是 docker 配置文件的一部分?这是我没有得到的东西,你使用 Spring Boot,因此它应该是主构建的一部分。 -
主要是为了展示问题,没有分享我所有的pom文件。我可以确认这不是问题
标签: java spring maven docker spring-boot