java - Docker 和 Java IDE 集成

标签 java maven ide docker

首先我要声明我不是 Java 开发人员,也不是 Docker 专家。

为了尽量减少前端和后端(在这个特定情况下,Java)开发人员之间的差距,我开始使用 java 和 maven 放置一些 docker 镜像,在构建之后,我启动了一个 docker 容器,其中有一个卷指向java 项目(前端开发人员不必担心依赖关系或如何运行后端服务)。

在这里我有一个问题。 我见过其他人用内部的实际代码构建图像而不是稍后附加它,那么最好的情况是什么(如果有的话)? 我这样做是因为我可以为“每个”项目重用该图像并避免构建不同的图像。

为了启动/停止/重新启动 docker 容器,我创建了一个脚本来执行所有这些操作,因此我可以对代码进行一些更改,将其关闭并重新启动。

它有点管用,我的意思是,我很清楚这不是 Java 开发人员从控制台执行此类操作的正常工作流程。 那么现在,最重要的问题是,如何将 docker 与 Java IDE 集成? 我知道您可以创建自定义构建/运行命令,但我也了解到 IDE 上不显示日志之类的内容。

有人可以向我解释一下您是如何使用 Docker + Java IDE 的吗?

注意:Maven 也用于编译 java 代码,如 mvn clean install(如果这有帮助的话)

最佳答案

我不将 Docker 与 Java IDE 一起使用。我使用 IDE (Eclipse) 编写和测试代码,使用 Maven 管理构建。然后我有一个 Dockerfile像这样:

FROM java:8

RUN apt-get update || apt-get update
RUN apt-get install -y maven

# Maven installs Java 7, which set itself as the default...
RUN update-alternatives --remove java /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

CMD java -jar target/main.jar

# Pull down dependencies here to allow Docker to cache more
ADD pom.xml /opt/app/pom.xml
WORKDIR /opt/app
RUN mvn dependency:go-offline -X

# I use the maven-shade-plugin to build a single jar
ADD src /opt/app/src
RUN mvn package

如果您在一台机器上构建所有图像,那么 Docker 将智能缓存,您无需执行任何其他操作。如果你想在更多机器上运行,或者你只是想让它显式,你可以这样做:

base/Dockerfile :

FROM java:8

RUN apt-get update || apt-get update
RUN apt-get install -y maven
RUN update-alternatives --remove java /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java

CMD java -jar target/main.jar

$ docker build -t yourorg/java-base:8 ./base/

myapp/Dockerfile :

FROM yourorg/java-base:8

ADD pom.xml /opt/app/pom.xml
WORKDIR /opt/app
RUN mvn dependency:go-offline -X

ADD src /opt/app/src
RUN mvn package

使用 Java 的 Docker 不会产生很大的影响,因为 JAR 已经非常便携且包含良好。我想它可以很容易地并排运行不同的 Java 版本。我使用它是因为它允许我运行不同语言的应用程序而无需知道容器内有什么。我有一些是 Java 的,一些是 Python 的,一些是 JavaScript 的,一些是 Erlang 的,但它们都是以 docker run -d <flags> myorg/myimage:someversion 开始的。 .

关于java - Docker 和 Java IDE 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28907975/

相关文章:

java - 谷歌翻译 API : Requests from this client application <empty> are blocked

java 小程序 ExceptionInInitializerError

java - JimFS:如何从路径获取文件

java - Spring Boot - "Error creating bean with name ' entityManagerFactory'"- 开始

php - 普拉多和 NetBeans

matlab - 在 MATLAB 中无需 ctrl+A 自动缩进所有代码

java - 如何检查 Java 字符串是否全是空格?

java - Maven exec 插件-当 classpathscope=test 时如何从 main/java 导入类

java - 仅在 Maven Deploy 中编译新更改的文件

java - 故意失去精度