下载 Maven 测试的所有依赖项

Posted

技术标签:

【中文标题】下载 Maven 测试的所有依赖项【英文标题】:Downloading all dependencies for Maven test 【发布时间】:2018-08-29 23:05:21 【问题描述】:

我正在使用以下 Dockerfile 的 Docker 容器中运行测试:

FROM maven:3.5.3-jdk-8
ENV APP_DIR=/app
RUN mkdir -p $APP_DIR
WORKDIR $APP_DIR
COPY pom.xml .
RUN mvn -B dependency:resolve -Dclassifier=test
COPY . $APP_DIR
RUN mvn -B test-compile compile
ENTRYPOINT ["mvn", "test"]

它会在构建过程中下载一些依赖项。问题是当mvn test 在 Docker 容器中运行时,它会下载一些与 Surefire 插件相关的依赖项。在构建过程中可以使用什么 Maven 命令来下载它们?该项目只是一个使用向导创建的基本应用程序,带有以下pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

【问题讨论】:

相关问题:***.com/questions/47969389/… 我遇到了同样的问题,“相关问题”似乎没有解决它。 @PhilNinan:你们最后是怎么解决的? 我没有让这个完全正常工作。但您可以从容器创建 docker 映像。这将是一个手动过程来创建映像,运行命令以下载所有依赖项,然后从现在具有所有依赖项的容器创建另一个映像。 【参考方案1】:

这里有一个简单的建议:不要这样做

RUN mvn -B dependency:resolve -Dclassifier=test

你可以这样做

RUN mvn -B test

因为此时没有将源文件或测试文件添加到容器中,所以不会执行实际测试,但会下载大部分所需的 Surefire 依赖项。注意:大部分,不是全部。

当我使用提到的 JUnit 3 依赖项对此进行测试时,mvn test 期间下载的依赖项数量从 22 个减少到 3 个:

Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit3/2.12.4/surefire-junit3-2.12.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-providers/2.12.4/surefire-providers-2.12.4.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit3/2.12.4/surefire-junit3-2.12.4.jar

也许这还不错。

【讨论】:

以上是关于下载 Maven 测试的所有依赖项的主要内容,如果未能解决你的问题,请参考以下文章

maven会在啥时候更新所有jar

预下载所有依赖项

Maven 依赖项下载时间过长

使用 Maven 下载 Spring 3.0.0 依赖项

阻止下载 Gradle 和 Maven 依赖项

下载一个 Maven 依赖项时出现问题