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

如何直接执行Maven构件中的代码?无需项目环境

不用预先下载安装,一键运行Maven构件的最优方案

嘿,这个需求我太熟了——想要直接用单条Maven命令运行远程构件,不用提前折腾下载安装,确实有几个比单纯用exec插件更靠谱的方案,我给你拆解下:

方案一:Dependency插件 + Exec插件 单命令组合

这是最直接的方式,Maven会自动帮你从远程仓库拉取所需构件,然后直接运行,全程不用手动下载任何文件:

mvn org.apache.maven.plugins:maven-dependency-plugin:3.6.0:get \
  -Dartifact=你的groupId:你的artifactId:版本号:jar:with-dependencies \
  org.codehaus.mojo:exec-maven-plugin:3.1.0:java \
  -Dexec.mainClass="你的主类全限定名"

关键细节:

  • with-dependencies分类器:如果你的构件已经打包成包含所有依赖的可执行JAR,一定要加上这个,否则Maven只会拉取主JAR,运行时会缺依赖报错。
  • 如果你的构件没有打带依赖的JAR,可以换成dependency:build-classpath来自动生成完整类路径,再传给Exec插件:
mvn org.apache.maven.plugins:maven-dependency-plugin:3.6.0:get \
  -Dartifact=你的groupId:你的artifactId:版本号:jar \
  org.apache.maven.plugins:maven-dependency-plugin:build-classpath \
  -Dmdep.outputFile=classpath.txt \
  org.codehaus.mojo:exec-maven-plugin:3.1.0:java \
  -Dexec.mainClass="你的主类全限定名" \
  -Dexec.classpathFile=classpath.txt

方案二:打包成可执行JAR + 简化命令

如果是你自己维护的构件,推荐先通过Maven Assembly Plugin或Shade Plugin把构件打包成带所有依赖的可执行JAR,这样后续运行命令会更简洁:

  1. 在你的构件pom.xml里添加Assembly插件配置:
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>3.6.0</version>
  <configuration>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    <archive>
      <manifest>
        <mainClass>你的主类全限定名</mainClass>
      </manifest>
    </archive>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>
  1. 打包后,运行命令就可以简化成:
mvn org.apache.maven.plugins:maven-dependency-plugin:3.6.0:get \
  -Dartifact=你的groupId:你的artifactId:版本号:jar:with-dependencies \
  org.codehaus.mojo:exec-maven-plugin:3.1.0:exec \
  -Dexec.executable=java \
  -Dexec.args="-jar %maven.dependency.local.path"

方案三:命令别名(适合高频使用)

如果你经常运行这个工具,可以把长命令做成shell别名,比如在~/.bashrc或~/.zshrc里添加:

alias run-my-tool='mvn org.apache.maven.plugins:maven-dependency-plugin:3.6.0:get -Dartifact=你的groupId:你的artifactId:1.0.0:jar:with-dependencies org.codehaus.mojo:exec-maven-plugin:3.1.0:java -Dexec.mainClass="com.your.package.Main"'

之后只要敲run-my-tool就能一键运行,完全不用记长命令。

为什么你之前用Exec插件没成功?

大概率是因为直接用mvn exec:java时,Maven默认是针对当前本地项目的,不会自动拉取远程构件。你需要配合Dependency插件的get或resolve目标,先让Maven把远程构件拉到本地仓库,再让Exec插件找到它的类路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:34:53