You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CI作业中按版本范围下载指定Maven构件?

按版本范围下载Maven构件的CI作业实现方法

要在单个CI作业中下载满足[2.17.1,)版本范围的org.apache.logging.log4j:log4j-api构件,推荐以下几种可靠实现方式:

方法1:直接使用Maven dependency:get 命令

这是最直接的方式,利用Maven原生的版本范围解析能力自动选择符合条件的最新版本,无需额外配置文件:

# 仅下载构件本身,不包含依赖
mvn dependency:get \
  -DgroupId=org.apache.logging.log4j \
  -DartifactId=log4j-api \
  -Dversion="[2.17.1,)" \
  -Dtransitive=false

# 如果需要同时下载依赖,去掉-Dtransitive=false参数
mvn dependency:get \
  -DgroupId=org.apache.logging.log4j \
  -DartifactId=log4j-api \
  -Dversion="[2.17.1,)"

构件会被下载到Maven本地仓库(默认路径~/.m2/repository),如果CI作业需要将构件复制到指定目录,可以配合dependency:copy命令。

方法2:使用Maven dependency:copy 下载到指定目录

如果需要将构件直接下载到CI作业的工作目录(方便后续步骤使用),可以用dependency:copy命令,结合临时POM或直接参数指定:

方式A:命令行直接指定参数

mvn dependency:copy \
  -DoutputDirectory=./maven-downloads \
  -Dartifact=org.apache.logging.log4j:log4j-api:[2.17.1,) \
  -Dtransitive=false

执行后,符合版本要求的log4j-api jar包会被保存到当前目录下的maven-downloads文件夹中。

方式B:临时POM文件(适合复杂依赖场景)

创建临时POM文件temp-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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>ci-temp</groupId>
  <artifactId>ci-temp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>[2.17.1,)</version>
    </dependency>
  </dependencies>
</project>

然后执行复制命令:

mvn -f temp-pom.xml dependency:copy \
  -DoutputDirectory=./maven-downloads \
  -DincludeGroupIds=org.apache.logging.log4j \
  -DincludeArtifactIds=log4j-api \
  -Dtransitive=false

方法3:无Maven环境下的API查询+下载(备选)

如果CI环境未安装Maven,可通过Maven Central的REST API先查询符合版本范围的最新版本,再用curl下载:

# 查询符合条件的最新稳定版本
LATEST_VERSION=$(curl -s "https://search.maven.org/solrsearch/select?q=g:org.apache.logging.log4j+AND+a:log4j-api&core=gav&rows=50&wt=json" \
  | jq -r '.response.docs[] | .v' \
  | sort -V \
  | grep -E '^2\.[0-9]+\.[0-9]+$' \
  | awk '$1 >= "2.17.1"' \
  | tail -n 1)

# 下载对应版本的jar包
curl -O "https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api/${LATEST_VERSION}/log4j-api-${LATEST_VERSION}.jar"

注意:此方法需要CI环境安装curl、jq和GNU sort(支持-V版本排序参数),且仅适用于稳定版本的查询,若需包含快照/里程碑版本需调整查询逻辑。

CI环境适配提示

  • 若CI runner未预装Maven,可使用官方Maven容器镜像执行命令,例如:
    docker run --rm -v "$(pwd)":/workspace -w /workspace maven:latest \
      mvn dependency:get -DgroupId=org.apache.logging.log4j -DartifactId=log4j-api -Dversion="[2.17.1,)" -Dtransitive=false
    
  • 部分CI平台(如GitLab CI、GitHub Actions)提供Maven缓存机制,可配置缓存~/.m2/repository以加快后续作业的下载速度。

内容的提问来源于stack exchange,提问作者bugs_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:40:38