我遇到一个问题,当从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路径是什么?