maven包阶段

时间:2012-11-15 02:21:49

标签: maven

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

希望找到解释。 谢谢。

3 个答案:

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