在Dockerfile中的mvn包之后运行.jar文件的问题

时间:2017-01-05 17:59:11

标签: java maven docker dockerfile executable-jar

我遇到一个问题,当从docker运行mvn包时,我的主类无法加载(同时它在从Eclipse运行mvn包时效果很好),相关的问题是我无法弄清楚Docker实际保存的位置.jar文件。我知道Eclipse存储它的位置,但是docker存储它的地方我不明白。我在Eclipse中编写了一个简单的应用程序并定义了我的pom.xml,因此我可以构建fat .jar(其中包含所有依赖编译的.jars)。在那个我自己调用Maven(在Eclipse中手动执行mvn包,这是我想要避免的 - 我想Docker做Maven的东西而不是我)。当我手动执行此操作时,一切正常。现在,我的Dockerfile就像这样:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"`

正如您所看到的,我正在从我的目标文件夹(我使用Eclipse手动存储我的胖.jar)复制到docker容器内的某个路径并调用它。 如果从本地项目中调用.jar文件,一切运行良好。

现在,我不想自己调用mvn包,但我想让Docker为我做。所以我写道:

FROM openjdk:8-jdk-alpine
EXPOSE 4567  
ADD target/ReadDocFile.jar /opt/demo/ReadDocFile.jar
CMD ["java","-jar","/opt/demo/ReadDocFile.jar"]

但在我调用与Eclipse中的mvn包相同的pom.xml之后(这次通过Dockerfile,你可以在上层代码的RUN部分看到mvn包),编译失败:

  

错误:无法找到或加载主类   com.dario.apachepoi.PrintSomething

为什么?它是相同的pom.xml。我无法理解为什么在同一个pom.xml上编译不起作用?在我看来它正在寻找本地文件夹(目标),但它不应该看起来在.jar文件的docker层内(在哪里?)?

我的完整Dockerfile如下所示:

ADD src /code/src
RUN ["mvn", "package"]

EXPOSE 4567  
ADD target/ReadDocFile.jar /opt/demo/ReadDocFile.jar
CMD ["java","-jar","/opt/demo/ReadDocFile.jar"]

另外,那条路径目标/ ReadDocFile.jar困扰了我很多 - 它正在我的本地商店看。不应该在docker容器里面看?在这种情况下,我怎样才能弄清楚在码头工具中运行maven的路径是什么?

我的pom.xml文件(在Eclipse中使用mvn包手动编译好,但在docker中运行mvn包时编译得不好):

FROM maven:3.3-jdk-8-alpine

WORKDIR /code

# Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]  
RUN ["mvn", "verify"]

# Adding source, compile and package into a fat jar
ADD src /code/src
RUN ["mvn", "package"]

EXPOSE 4567  
#ADD target/ReadDocFile.jar /opt/demo/ReadDocFile.jar
CMD ["java","-jar","target/ReadDocFile.jar"]

请帮忙!

编辑: 我认为必须编写其他内容而不是我的目标文件夹?但是什么,在docker中生成.jar的docker路径是什么?

0 个答案:

没有答案