当前位置: 首页 > 知识库问答 >
问题:

Docker和Maven依赖离线

司徒胤
2023-03-14

我试图为我的Java Spring MVC应用程序构建一个docker,包由MAVEN管理。

我的项目文件夹视图:

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

我的泊坞窗文件

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正在寻找中央的wc-dao并且找不到它。

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

我该如何解决?

共有2个答案

曹茂材
2023-03-14

所以为了解决这个问题,我使用了泊坞站卷:

docker run --rm -v <my-java-app>:/app -v <a folder to maven repository>:/root/.m2 -w /app maven:3.6-jdk-8 mvn clean install -T 2C -DskipTests=true

这是我们目前得到的最佳解决方案。

姜玮
2023-03-14

这里的问题是,当maven执行< code > dependency:go-offline 时,它会查找所有的依赖项,包括对项目中其他模块的依赖项。但是在运行的时候,没有为模块依赖关系构建工件,因为它们从来没有被构建过。点击此处阅读更多内容。

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

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

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

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

同样,如果要排除组,也可以使用ExcludeGroupID。

当然,这种方式Docker不会缓存您想要的所有内容,但有所缓存总比没有好。

 类似资料:
  • 我想知道以下jar的所有传递依赖项: 将经典命令移动到pom。项目定义依赖关系和输入的xml: mvn依赖:树 将显示: 我没看到魔咒父母: 乍一看,mvn命令似乎可以显示非pom类型的依赖项。 有没有一种方法可以精确地显示使jar保持活动状态所需的每个文件? 谢谢

  • 主要内容:排除依赖,可选依赖,排除依赖 VS 可选依赖 我们知道 Maven 依赖具有传递性,例如 A 依赖于 B,B 依赖于 C,在不考虑依赖范围等因素的情况下,Maven 会根据依赖传递机制,将间接依赖 C 引入到 A 中。但如果 A 出于某种原因,希望将间接依赖 C 排除,那该怎么办呢?Maven 为用户提供了两种解决方式:排除依赖(Dependency Exclusions)和可选依赖(Optional Dependencies)。 排除依赖

  • 我在Netbeans-8工作 我正在构建两个项目。Project1是Project2的依赖项。 如果我在两个项目中都做了更改1 我碰巧经常更改项目1。在我的IDE中使用maven之前,我习惯于构建一个依赖项目,也构建它的依赖项。我的意思是这就是构建系统中的依赖项的全部含义... 如何解决这个问题,以便project2上的“使用依赖项构建”也构建project1?

  • 主要内容:依赖声明,获取依赖坐标Maven 是一款优秀的依赖管理工具,那么什么是依赖呢? 通俗的说,如果一个 Maven 构建所产生的构件(例如 Jar 文件)被其他项目引用,那么该构件就是其他项目的依赖。 依赖声明 Maven 坐标是依赖的前提,所有 Maven 项目必须明确定义自己的坐标,只有这样,它们才可能成为其他项目的依赖。当一个项目的构件成为其他项目的依赖时,该项目的坐标才能体现出它的价值。 当 Maven 项目需要声

  • 我正在尝试在 Docker 容器中构建/部署Spring启动。 如您所见,我用第一个mvn命令缓存了所有的依赖项,这样我的代码应用程序中的每一个变化都不会触发新的大量依赖项下载。它适用于大多数依赖项,但仍有一些需要下载(即使缓存)。这是第二个mvn命令(包)的日志: (顺便说一句,(0 B在0 B / s)有点奇怪...只是一张支票? 如果我基于第一个maven命令之后的步骤启动一个容器(mvn依

  • 我有一个Maven多模块项目,在主pom中将一些旧版本的Spring Boot依赖项设置为父项。xml。所有子模块都从这个主pom继承Spring Boot依赖项。xml。 这很好,但是在一个新的子模块(也是多模块)中,我想使用最新的Spring引导版本,而不改变项目中正在使用的版本(以及所有依赖项)。 有没有办法巧妙地覆盖从父版本派生的Spring引导版本(及其所有依赖项),并在子模块中使用不同