有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个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汇编插件或maven jar插件(我在target/after mvn clean install中成功地获得了.jar)

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


共 (1) 个答案

  1. # 1 楼答案

    有一个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代码不会在Java1.5中运行。如果您使用的是最新的功能,请确保您的客户机已经拥有相应的版本,或者至少能够从其他地方获得。您可能也想看看sourcetarget编译选项:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-example