我是maven的新手,对于maven包装阶段的解释非常高兴。我有一个名为com-theta-gesture的maven项目,有三个java类。其中一个类有主要方法。当我运行mvn package命令时,将创建目标文件夹。以下是目标文件夹的结构
target/
|
classes/
|
maven-archive/
|
generated-sources/
|
testclasses/
|
surefire_report/
|
com-theta-gesture-1.0-SNAPSHOT.jar
classes文件夹中的是应用程序的三个已编译的java类。我的问题是,如果我要运行此应用程序,是否必须运行com-theta-gesture-1.0-SNAPSHOT.jar可执行jar或者我必须在classes文件夹中运行主类。因为当我尝试以下命令时
C:\Users\FAISAL\Desktop\disaster\com-bbox-gesture\target>java com-bbox-gesture-1.0-SNAPSHOT.jar
我收到以下错误
Error: Could not find or load main class com-bbox-gesture-1.0-SNAPSHOT.jar
希望找到解释。 谢谢。
答案 0 :(得分:1)
如果您只是构建独立的JAR文件,则无需使用程序集插件。
相反,您可以简单地配置已在项目中使用的maven-jar-plugin,如下所示:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
...
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
</configuration>
...
</plugin>
</plugins>
</build>
如果它是一个没有依赖关系的独立JAR,则不需要addClasspath
。
通过转到maven-jar-plugin的文档,然后点击左侧导航栏中的Creating an Executable JAR File,可以找到上面的代码段。
答案 1 :(得分:0)
Google for“maven self executable jar”会给你答案
http://maven.apache.org/plugins/maven-assembly-plugin/usage.html
简而言之,JAR不能自动执行。您需要将Main Class信息放在MANIFEST文件中。引用的链接描述了Maven设置此类信息的正常方式。
答案 2 :(得分:0)
Adrian Shum解释说,默认情况下,jar不是可执行的jar。
但是,如果您只想运行jar但没有创建可执行jar,则可以使用exec-maven-plugin
。
这是一个小pom文件,其中包含exec-maven-plugin
:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.acne</groupId>
<artifactId>app</artifactId>
<version>1.0-SNAPSHOT</version>
<name>${project.artifactId}-${project.version}</name>
<properties>
<mainClass>com.acne.App</mainClass>
<argument/>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>${mainClass}</mainClass>
<arguments>
<argument>${argument}</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</project>
使用此pom,您可以执行以下操作:
mvn package exec:java
您的程序将被打包然后执行。
使用已定义的属性,您可以轻松更改主类并添加参数:
mvn exec:java -DmainClass=com.acne.Calculator -Dargument=100