如何从命令行将基于 Maven 的 Java 项目编译为 运行
How to compile Maven based Java project to run it from command line
我有一个 Maven 项目,我需要以某种方式对其进行编译,以便我能够将编译后的文件传输到不同的机器,然后在那里执行(可能具有不同的 Java 版本)。
我看了这个
并且能够执行:
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 后成功地在 target/ 中获取了 .jar)。
我不确定这些步骤是否与我的目标相关,因为我需要的是创建一些 运行 没有任何 java -jar 或 mvn 并且可以移植和 运行 在另一台机器上。
有一个 Maven 构建插件可以将所有依赖项捆绑在一个 JAR 中。你可以简单地用
来执行它
java -jar mybundled.jar
不关心 class 路径依赖。
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 与平台无关,通常 您可以信赖这一点。然而,我想到了三件事会让生活变得艰难:
- 您的代码取决于系统编码。 Maven 应该会在日志中就此向您发出警告,建议您明确指定它。
- 您与 运行时间进行交互,例如执行系统命令。
ps
不适用于 windows 并且 dir /s
可能不适用于 *nix。
- 您的 Java 环境版本不同。当然,JavaFX 代码不会 运行 与 Java 1.5。如果您使用最新的功能,请确保您的客户已经拥有相应的版本,或者至少能够从某个地方获得它。您可能还想看看
source
和 target
编译选项:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-example
我有一个 Maven 项目,我需要以某种方式对其进行编译,以便我能够将编译后的文件传输到不同的机器,然后在那里执行(可能具有不同的 Java 版本)。
我看了这个
并且能够执行:
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 后成功地在 target/ 中获取了 .jar)。
我不确定这些步骤是否与我的目标相关,因为我需要的是创建一些 运行 没有任何 java -jar 或 mvn 并且可以移植和 运行 在另一台机器上。
有一个 Maven 构建插件可以将所有依赖项捆绑在一个 JAR 中。你可以简单地用
来执行它java -jar mybundled.jar
不关心 class 路径依赖。
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 与平台无关,通常 您可以信赖这一点。然而,我想到了三件事会让生活变得艰难:
- 您的代码取决于系统编码。 Maven 应该会在日志中就此向您发出警告,建议您明确指定它。
- 您与 运行时间进行交互,例如执行系统命令。
ps
不适用于 windows 并且dir /s
可能不适用于 *nix。 - 您的 Java 环境版本不同。当然,JavaFX 代码不会 运行 与 Java 1.5。如果您使用最新的功能,请确保您的客户已经拥有相应的版本,或者至少能够从某个地方获得它。您可能还想看看
source
和target
编译选项:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-example