我正在尝试修改一个应用程序,但与使用 Docker工作时相比,目前我的开发反馈循环要慢得多。与码头,我必须重建我的jar和图像后,每次更改(请参阅更详细的工作流程),造成缓慢的反馈循环。Docker世界中的Java开发人员为避免这种情况做了什么?
Dockerfile (供参考):
FROM openjdk:8
WORKDIR /usr/src/app
COPY /target/my-project.jar .
CMD ["java", "-jar", "my-project.jar"]与 Docker (每次更改后3-5分钟的反馈时间):
在本地对我的Java codebase.
没有Java的(每次更改后反馈只需几秒钟):
在我的Intellij运行配置上对运行的Java codebase.
。
据我所知,我的本地开发反馈循环(没有Docker)要快得多,因为Intellij能够缓存所有字节码(即"target/“目录中的类文件),只为更改的类(Es)重新构建类文件,跟踪我的类路径,并运行我的主要方法。它不需要重建整个jar,因此要快得多。我不知道怎么在Docker里复制这个。
UPDATE/ANSWER
我用以下方法解决了这个问题:
将我的项目的目标文件夹放到容器中的/usr/src/app/
新Dockerfile:
FROM openjdk:8
WORKDIR /usr/src/app/target
CMD ["java", "-cp", "/usr/src/app/target/classes:/usr/src/app/target/dependency-jars/*", "com.me.MainClass"]发布于 2020-06-19 15:30:48
这里有两件事可以改进:
1)不要将jar文件复制到映像中,使用-v将容器中的文件夹作为卷挂载
2)如果建造罐子是个问题,那就不要!准备一个包含必要的类路径的java调用,并调用主类。不需要罐子。
当然,这是为了开发,但在功能上不应该有太大的差别。另外,是否有很好的理由测试坞容器中的类?如果要这样做的话,我将分离Java类和Docker映像的开发,并使用您描述的没有docker的工作流来测试我的Java代码,而且只有当我满意地转向映像开发时。
https://stackoverflow.com/questions/62473455
复制相似问题