对于一个新的Spring项目,我想设置一个Docker容器来构建+运行+调试我的应用程序。
此刻我正在使用此Dockerfile:
FROM maven:3.6.2-jdk-8-slim
COPY . /app/
WORKDIR /app/
RUN mvn clean package
FROM maven:3.6.2-jdk-8-slim
COPY target/app.jar app.jar
ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005", "-jar","/app.jar"]
EXPOSE 5005
第一步是构建项目。在第二步中,运行该应用程序,暴露一个5005端口以进行“远程”调试。
然后从我的IDE(IntelliJ)中配置远程调试配置以在容器上执行调试。
您可以想象,对于我想在项目中调试的每个小编辑执行这些步骤都有些尴尬。
因此,我想知道是否存在使用IntelliJ来自动构建调试器并将其附加到我的应用程序的更实用方法,就像直接在我的开发机上进行开发时一样...
答案 0 :(得分:0)
您可以实现以下两个想法:
让您的CI / CD管道构建您的工件,然后将其打包到docker映像中,而不是将这项工作卸载到docker文件中(您将对该过程有更多的控制权)。最后,您也可以将其部署到目标环境。
在DEV计算机上使用Docker运行项目几乎不会带来任何好处。
答案 1 :(得分:0)
首先,您可以直接从IntelliJ打开pom.xml
并运行应用程序,而无需运行maven(IntelliJ具有出色的maven插件)。
由于您以java -jar
的身份运行它,因此甚至不需要最终版本的IntelliJ。
现在这就是我们通常的发展方式,甚至在行家之前也是如此。例如,如果您想检查测试是否已运行,也可以在本地运行mvn clean package
(同样,也可以在Idea中进行此操作)。当您进行更改时,创建一个docker并部署在服务器上。
到目前为止,这是我可以推荐的最佳解决方案。您在问题套件中描述的方式更多是调试远程服务器(已就绪的环境)。
如果绝对需要这种方式,您仍然可以使用JVM的HotSwap功能进行小的更改(只要这些更改在方法内部即可):通过远程调试器连接时,右键单击并“重新编译”具有以下内容的类:更改。它将自动加载到远程JVM,因此您实际上不需要触发所有此过程。
您也不必在maven(mvn clean package -Dmaven.tests.skip
)中运行所有测试