如何使用 Maven 打包并运行具有依赖项的简单命令行应用程序?

发布于 2024-11-07 19:00:01 字数 757 浏览 1 评论 0原文

我对 java 和 Maven 都是全新的,所以这可能非常简单。

如果我按照此处的 maven2 hello world 说明进行操作:

http://maven.apache.org/guides/getting-started/maven-in- Five-minutes.html

一切正常。如果我随后更改 pom.xml 以从远程存储库引入依赖项,则该依赖项的文件将存储在 ~/.m2/repository/new-dependency/ 中。

使用 hello world 指令中的语法来运行应用程序需要我将依赖项的绝对路径添加到我的类路径中(通过设置环境变量或通过命令行开关):

java -cp target/my-app-1.0-SNAPSHOT.jar:/.../.m2/.../new-dependency.jar com.mycompany.app.App

这显然会很快就会变得笨拙:)

我怀疑这不是运行 java 程序的常用方式,我只需要阅读有关 .jar 文件的更多信息,但是当我这样做时,我将不胜感激任何有关如何正确执行此操作的提示。

顺便说一句,我没有使用 IDE。 vim 从命令行。

谢谢!

麦克风。

I am brand new to both java and to maven, so this is likely very simple.

If I follow the maven2 hello world instructions here:

http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

everything works OK. If I then alter pom.xml to bring in a dependency from a remote repository, the files for this dependency get stored in ~/.m2/repository/new-dependency/.

Using the syntax in the hello world instructions to run the application requires that I add the absolute path to the dependency to my classpath (either by setting the environment variable or via the command line switch):

java -cp target/my-app-1.0-SNAPSHOT.jar:/.../.m2/.../new-dependency.jar com.mycompany.app.App

This will obviously get unwieldy quickly :)

I suspect that this is not the usual way of running a java program and that I just need to read more about .jar files, but while I am doing so I would appreciate any tips on how to do this properly.

I am not using an IDE, btw. vim from the command line.

Thanks!

Mike.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

蓝梦月影 2024-11-14 19:00:01

你可以使用maven本身来运行它,我相信它为你设置了类路径。

mvn compile

将编译它
然后你运行:

mvn exec:java -Dexec.mainClass="com.mycompany.app.App"  

这将执行它。

您可以看到 http://www .vineetmanohar.com/2009/11/3-ways-to-run-java-main-from-maven/ 有关运行方式的更多信息(包括将命令行参数传递给您想要的东西)跑步)

You can use maven itself to run it, I believe it sets the classpath for you.

mvn compile

will compile it
then you run:

mvn exec:java -Dexec.mainClass="com.mycompany.app.App"  

which will execute it.

You can see http://www.vineetmanohar.com/2009/11/3-ways-to-run-java-main-from-maven/ for some more info on ways to run (including passing command-line args to the thing you want to run)

汐鸠 2024-11-14 19:00:01

您可以通过将 Main-Class 属性添加到其清单文件来使 jar 可执行。在 Maven 中,这是由归档器插件完成的。要添加 Main-Class 属性,请将其添加到您的 pom.xml 中:

 <build>
   <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>        
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>com.mycompany.app.App</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
 </build>

您现在可以使用以下命令运行您的 jar:java -jar myjar.jar 或双击它(并非所有版本都可用)平台)。

You can make a jar executable by adding the Main-Class attribute to its manifest file. In Maven this is done by the archiver plugin. To add the Main-Class attribute, add this to your pom.xml:

 <build>
   <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>        
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>com.mycompany.app.App</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
 </build>

You can now run your jar with the command: java -jar myjar.jar or by double clicking on it (not available in all platforms).

深海夜未眠 2024-11-14 19:00:01

如果您希望对您和其他人来说简单,那么您可以使用 maven-assemble-plugin 生成一个包含所有依赖项的 jar。示例如下: http://maven.apache.org/plugins/maven - assembly-plugin/usage.html,执行部分:构建程序集

If you want it simple for you and others, then you can generate a jar with all dependencies in it, using the maven-assembly-plugin. Example is here: http://maven.apache.org/plugins/maven-assembly-plugin/usage.html, section Execution: Building an Assembly

归属感 2024-11-14 19:00:01

您可以使用 maven-shade-plugin 它将创建一个可执行的 uber war与所有依赖项。

或者

使用 appassembler-plugin 创建一个导入所有依赖项的脚本并让您从命令行执行主类。

You can use the maven-shade-plugin which will create an executable uber war with all dependencies.

OR

Use the appassembler-plugin which creates a script that imports all dependencies and lets you execute a main class from the command line.

谎言月老 2024-11-14 19:00:01

为了完整起见,值得一提的是另一种选择。

Spring Boot 可以创建一个 UNIX 系统上的可执行 JAR 文件

For completeness, it's worth mentioning another option.

Spring Boot can create an executable JAR file on UNIX systems.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文