1

我正在尝试运行我的第一个 Java 程序,这是一个与在线 API 交互的示例脚本(Github 上的源代码)。

由于它有依赖关系,我按照推荐的步骤使用mvn testand mvn package,这似乎工作(见输出)。

然而,我不明白如何运行我刚刚编译(或打包?)的程序。该.java文件包含public final class NesstarStudyLister,因此基于pom.xml我尝试(在基本目录中)以下命令的文件:

mhermans@fyr:~/tmp/nesstar-api-demo$ java -cp target/nesstar_study_lister-1.0-SNAPSHOT.jar com.nesstar.demo.NesstarStudyLister

导致NoClassDefFoundError. _

如何成功运行小型 Java 程序?

编辑

根据 Dave Newton 的推荐,我使用了Exec Maven 插件,它显然只包含运行

mvn exec:java -Dexec.mainClass=com.nesstar.demo.NesstarStudyLister

在基本目录中,它完美地执行了 java 程序。

Andriy Plokhotnyuk 的解决方案也可以使用,使用以下命令:

(edit pom.xml to include the <build>...</build> information)
mvn package
java -jar target/nesstar_study_lister-1.0-SNAPSHOT-jar-with-dependencies.jar
4

3 回答 3

2

简单的方法通常是Exec Maven Plugin

简而言之:

  • 添加 exec 插件作为依赖项。
  • 定义主类属性(程序的入口点)。
  • 运行 exec 目标。

您也可以使用 Maven 创建一个包含项目依赖项(jar)的目录并手动设置类路径,但是当您可以使用该插件时,IMO 有点痛苦。

您还可以创建一个 jar,将所有项目的依赖项包含在一个文件中,但这可能需要更多的工作来显式包含/排除任何冲突的依赖项。(需要注意的是,这也可能是其他任何一种方法的问题。)

于 2012-07-13T17:35:42.723 回答
2

添加以下插件配置以准备可执行jar:

 <project>
 ....   
   <build>
       <plugins>    
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <phase>package</phase>
                    <configuration>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                            <manifest>
                                <mainClass>com.nesstar.demo.NesstarStudyLister</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </execution>
            </executions>
        </plugin>

       </plugins>
   </build>
  ...
</project>

然后转到目标目录并运行:

java -jar nesstar_study_lister-1.0-SNAPSHOT-jar-with-dependencies.jar 
于 2012-07-13T17:45:12.077 回答
0

您需要创建一个可执行的 jar 文件,然后使用 java -jar filedirectory/fileName.jar

于 2012-07-13T17:33:12.783 回答