簡體   English   中英

使用依賴項運行可執行jar時出現問題

[英]Problems running executable jar with dependencies

嘿,所以我一直在從事一個我希望能夠從命令行作為可執行jar運行的項目。 我已經能夠使用Mavens assembly: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>

構建成功,並創建jar omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar。 我在命令行中轉到我的項目目標文件夾,然后鍵入

java -jar omad-update-0.0.1-SNAPSHOT-jar-with-dependencies.jar

我也嘗試過

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,但似乎都沒有作用。 感謝您的任何幫助。

我在上面的清單中沒有看到Class-Path條目,但是您很長的文件名提到了依賴關系。 如果程序依賴此jar文件中的jar,則必須在Class-Path部分中枚舉它們。 有關更多詳細信息,請參見將類添加到JAR文件的類路徑中。

另一種選擇是使用onejar-maven-plugin 不幸的是, 使用頁面有點稀缺,但是如果配置正確,插件會執行應有的操作。

通過將以下代碼添加到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>

如果pom中沒有執行標簽及其子節點,則僅將maven依賴項添加到jar中,而不會添加項目本身的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM