如何使用maven打包和运行具有依赖关系的简单命令行应用程序?

时间:2011-05-16 22:11:39

标签: java maven-2 maven

我对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来自命令行。

谢谢!

麦克

4 个答案:

答案 0 :(得分:17)

您可以使用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/以获取有关运行方式的更多信息(包括将命令行参数传递给您要运行的内容)

答案 1 :(得分:12)

您可以通过将Main-Class属性添加到其清单文件来使jar可执行。在Maven中,这是由archiver插件完成的。要添加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或双击它(并非在所有平台上都可用)。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

您可以使用maven-shade-plugin来创建与所有依赖项的可执行超级战争。

OR

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