Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行具有依赖项的可执行jar时出现问题_Java_Maven_Command Line - Fatal编程技术网

Java 运行具有依赖项的可执行jar时出现问题

Java 运行具有依赖项的可执行jar时出现问题,java,maven,command-line,Java,Maven,Command Line,嘿,我一直在做一个项目,我希望能够从命令行作为可执行jar运行。我已经能够使用mavenassembly:single命令创建具有依赖项的jar。我的pom看起来像这样 <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</ve

嘿,我一直在做一个项目,我希望能够从命令行作为可执行jar运行。我已经能够使用mavenassembly:single命令创建具有依赖项的jar。我的pom看起来像这样

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>org.openmetadata.main.OmadUpdate</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>
    </plugins>
</build>
我也试过了

java -cp omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar org.openmetadata.main.OmadUpdate

不幸的是,在每种情况下,我都会收到一个java.lang.NoClassDefFoundError:org/openmetadata/main/OmadUpdate。我很困惑,因为我知道我的主类在org.openmetadata.main包中,但却找不到它。我发现这尤其令人困惑,因为在我的pom中,我指定该类作为我的主类。我曾尝试将主类的名称更改为src.main.java.org.openmetadata.main.OmadUpdate,也只是简单地更改为OmadUpdate,但这两种更改似乎都没有效果。提前谢谢你的帮助

我在上面的清单中没有看到
类路径
条目,但是您的很长文件名提到了依赖项。如果此jar文件中存在程序依赖的jar,则必须在
类路径
部分中枚举它们。有关详细信息,请参阅。

另一个选项可能是使用。不幸的是,这个页面有点少,但是插件在正确配置时做了应该做的事情。

我终于能够通过在pom中添加以下代码来实现这一点

    <build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>org.openmetadata.omadupdate.OmadUpdate</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id> <!-- this is used for inheritance merges -->
                <phase>package</phase> <!-- bind to the packaging phase -->
                <goals>
                  <goal>single</goal>
                </goals>
              </execution>
            </executions>
        </plugin>
    </plugins>
</build>

maven汇编插件
2.3
真的
org.openmetadata.omadupdate.omadupdate
带有依赖项的jar
组装
包裹
单一的

如果pom中没有executions标记及其子项,那么只有maven依赖项将被添加到jar中,而项目本身的类将不会被添加

但是根据这个页面,我似乎不需要指定一个类路径,它似乎只需要根据需要打包maven依赖项。但是,我认为我可能会犯错误。打开jar文件,在META-INF目录中查找MANIFEST.MF文件。是否指定了类路径?好的,因此我在Mavens上发现,将true添加到pom.xml中应该会处理类路径,但是我仍然存在一个问题,即当我尝试运行可执行jar时,找不到我的主类。发布MANIFEST.MF的内容。还要验证jar文件是否包含以下结构“org/openmetadata/main/OmadUpdate.class”Manifest-Version:1.0 Build By:Andrew Build Jdk:1.6.027Created By:Apache Maven main class:org.openmetadata.main.OmadUpdate Archiver Version:Plexus Archiver这是我的清单,你是正确的,没有类路径,但根据我在上一次回复中引用的网站,据我所知,Maven应该添加一个类路径。。。
    <build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>org.openmetadata.omadupdate.OmadUpdate</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id> <!-- this is used for inheritance merges -->
                <phase>package</phase> <!-- bind to the packaging phase -->
                <goals>
                  <goal>single</goal>
                </goals>
              </execution>
            </executions>
        </plugin>
    </plugins>
</build>