如何编译基于Maven的Java项目以从命令行运行它

时间:2016-07-26 22:37:04

标签: java maven cmd compilation executable

我有一个Maven项目,我需要以某种方式编译,所以我能够将编译的文件传输到另一台机器,然后在那里执行(可能有不同的Java版本)。 我看了这个SO question

并且能够执行:

mvn clean install
mvn dependency:copy-dependencies

然而,当我尝试时:

cd target/
java -cp myApp-0.0.1.jar:dependency myApp

我得到了

Error: Could not find or load main class myApp

我的pom.xml没有mvn-assembly-plugin或maven-jar-plugin(我在mvn clean install之后成功获取了目标/中的.jar)。

我不确定这些步骤是否与我的目标有关,因为我需要的是创建一些没有任何java -jar或mvn的东西,并且可以在不同的机器上移植和运行。

1 个答案:

答案 0 :(得分:3)

有一个Maven构建插件可以将所有依赖项捆绑在一个JAR中。你可以用

简单地执行它
java -jar mybundled.jar

没有关心类路径依赖关系。

这是Maven插件。将MainClass替换为您的入口点。

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-assembly-plugin</artifactId>
   <version>2.4.1</version>
   <configuration>
      <descriptorRefs>
         <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>       
      <archive>
        <manifest>
          <mainClass>com.yourdomain.Main</mainClass>
        </manifest>
      </archive>
     </configuration>
    <executions>
      <execution>
         <id>make-assembly</id>
         <phase>package</phase>
         <goals>
           <goal>single</goal>
         </goals>
       </execution>
    </executions>
</plugin>

由于它绑定到package lifecycle,您在执行...后会在目标目录中找到捆绑的JAR ...

mvn package

关于您的代码无法在其他计算机上运行的问题,Java与平台无关,而通常您可以依赖它。然而,我想到的有三件事可以让生活变得艰难:

  1. 您的代码取决于系统编码。 Maven应该在日志中给你一个警告,建议你明确指定。
  2. 您与运行时交互,就像执行系统命令一样。 ps无法在Windows上运行,dir /s可能不在* nix上运行。
  3. 您的Java环境版本不同。当然,JavaFX代码不能与Java 1.5一起运行。如果您使用最新功能,请确保您的客户已经拥有相应的版本,或者至少能够从某个地方获取它。您可能还想查看sourcetarget编译选项:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-example