2012-11-15 141 views
0

我是maven的新手,对maven包阶段的解释会很高兴。我有一个名为com-theta-gesture的maven项目,它有三个java类。其中一个类有其中的主要方法。当我运行mvn包命令时,目标文件夹被创建。下面是目标文件夹的结构maven包阶段

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 

希望找到一个解释如下。 谢谢。

回答

1

没有必要使用Assembly插件,如果你只是建立一个独立的JAR文件。

相反,你可以简单地配置Maven的JAR-插件,它已经在你的项目中使用,如下所示:

<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> 

你不会需要addClasspath,如果它是一个独立的JAR没有依赖。

上面的代码可以通过转到maven-jar-plugin的文档并在左侧导航栏中单击Creating an Executable JAR File来找到。

0

Adrian Shum解释说,这个jar默认不是可执行的jar。

如果您只是想运行jar但不创建可执行jar,则可以使用exec-maven-plugin

这是列入exec-maven-plugin小POM文件:

<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 
+0

感谢马巴这是一个解释,但我其实想要创建一个可执行的jar。可能会尝试其他建议 –

相关问题