0

我是 maven 新手,很高兴能对 maven 包阶段进行解释。我有一个名为 com-theta-gesture 的 maven 项目,其中包含三个 java 类。其中一个类中有 main 方法。当我运行 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

希望能找到解释。谢谢你。

4

3 回答 3

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>

addClasspath如果它是没有依赖关系的独立 JAR,则不需要。

可以通过转到maven-jar-plugin的文档并单击左侧导航中的创建可执行 JAR 文件来找到上面的代码片段。

于 2012-11-15T10:50:44.643 回答
0

谷歌“maven self executable jar”会给你答案

http://maven.apache.org/plugins/maven-assembly-plugin/usage.html

简而言之,JAR 不能自动执行。您需要将 Main Class 信息放在 MANIFEST 文件中。引用的链接描述了 Maven 中设置此类信息的正常方式。

于 2012-11-15T03:57:01.640 回答
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
于 2012-11-15T06:14:25.070 回答