我有一个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的东西,并且可以在不同的机器上移植和运行。
答案 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与平台无关,而通常您可以依赖它。然而,我想到的有三件事可以让生活变得艰难:
ps
无法在Windows上运行,dir /s
可能不在* nix上运行。 source
和target
编译选项:http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#crosscomp-example