java - Docker 和 Maven 依赖离线

标签 java maven docker spring-mvc

我正在尝试为我的 Java Spring MVC 应用程序构建一个 docker,并且包由 MAVEN 管理。

我的项目文件夹 View :

1)wc-aws(JAR)
    -pom.xml
    -src
2)wc-admin(spring project WAR)
    -pom.xml
    -src
3)wc-dao(JAR)
    -pom.xml
    -src
-pom.xml

我的 DockerFile

FROM maven:3.6.1-jdk-8 as maven_builder

ENV HOME=/app

RUN mkdir $HOME

WORKDIR $HOME

ADD . $HOME

RUN mvn dependency:go-offline

RUN mvn clean install -T 2C -DskipTests=true

FROM tomcat:8.5.43-jdk8

ENV HOME=/app

FROM tomcat:8.5.43-jdk8

COPY --from=maven_builder /app/wc-admin/target/wc-admin.war /usr/local/tomcat/webapps/ROOT

我收到以下错误:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for wc-pom 1.0:
[INFO]
[INFO] wc-pom ............................................. SUCCESS [02:17 min]
[INFO] wc-commons ......................................... SUCCESS [02:56 min]
[INFO] wc-dao ............................................. FAILURE [ 13.308 s]
[INFO] wc-aws ............................................. SKIPPED
[INFO] wc-event ........................................... SKIPPED
[INFO] wc-mqueue .......................................... SKIPPED
[INFO] wc-admin ........................................... SKIPPED
[INFO] wc-ftp-download .................................... SKIPPED
[INFO] wc-content-transformation .......................... SKIPPED
[INFO] wc-content-notification ............................ SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  05:59 min
[INFO] Finished at: 2019-07-26T07:48:34Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project wc-dao: Could not resolve dependencies for project com.whitecoats:wc-dao:jar:1.0: Could not find artifact com.whitecoats:wc-commons:jar:1.0 in central (https://repo.maven.apache.org/maven2) -> [Help 1]

正如你所看到的,错误是说,maven 正在central 中寻找wc-dao,但找不到它。

但是 wc-dao 是本地 java 项目,其 JAR 文件是在运行时创建的。

如何解决?

最佳答案

这里的问题是,当 maven 执行 dependency:go-offline 时,它会查找所有依赖项,包括对项目中其他模块的依赖项。但在运行时,没有为模块依赖项构建 Artifact ,因为它们从未构建过。 Read more here

这是一个已知问题,同时,除了先构建依赖模块之外没有其他解决方案。

但在您的特定情况下这是不可能的(一旦构建依赖项,Docker 就无法缓存该命令)。

解决方法:依赖插件有一个名为 excludeArtifactIds 的选项。使用它您可以排除一些确实需要模块化依赖关系的模块。有了这个,您将能够解决除排除模块中的依赖项之外的所有依赖项。

mvn dependency:go-offline -DexcludeArtifactIds:wc-dao,some-other-artifact

与使用 excludeGroupIds 的方式相同如果您想排除某个组。

当然,这样 Docker 就不会缓存你想要的所有内容,但缓存一些东西总比什么都不缓存好。

关于java - Docker 和 Maven 依赖离线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57213350/

相关文章:

java - PhpStrom7 SFTP 连接失败

maven - IntelliJ 使用 Maven 而不是 JUnit 运行单元测试

Docker 图像推送到谷歌容器注册表不起作用

docker - 在 $PATH 中找不到可执行文件

java - 输入时验证 JTextField

java - 无限预测试 while 循环 (java)

java while循环卡住了

java - Jenkins:使用单元测试自动检查 Maven 版本

java - 无法在intellij idea/svn中提交pom.xml

haskell , docker : stack download failure