簡體   English   中英

運行時未找到依賴項 maven

[英]dependency not found at runtime maven

我是 maven 的新手,對 java 有點陌生。 嘗試了谷歌和相關資源,但我沒有找到與我的情況相似的資源。

現在,我有 maven 項目XY X可以看作是一個帶有一些實用程序的共享庫, Y是一個簡單的JFrame打印"hello world"並調用X中的 static 方法。

我在項目X上執行“以maven install運行”,得到"build successful" 我在項目Y中添加項目X作為依賴項(使用 Eclipse 中的 pom 編輯器,瀏覽存儲庫並找到它)。 我在項目Y上執行“以maven package運行”,我得到"build successful" 通過java -jar運行項目Y或檢查生成的 jar 后,項目X到處都丟失了,我得到了一個奇特的 class 未發現異常。 Eclipse 找到它並且在源代碼編輯器中沒有編譯錯誤。

為什么它只在 Eclipse 編輯器中工作,而不是在 jar 中工作?

聚甲醛:

    <dependency>
        <groupId>com.company.deployment.shared</groupId>
        <artifactId>com.company.deployment.shared</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>

Maven 不會為您生成組合的 JAR 文件。 Eclipse 正在做的是查看 Maven 配置並在運行時將所有必需的類 / jars 添加到您的類路徑中。

如果要從命令行運行程序,則需要手動將所有 JARs 添加到類路徑中。

或者,您可以 直接從 Maven運行您的程序,這應該設置您的所有依賴項。 有許多選項取決於您想要做什么,即如果它是一個旨在由最終用戶運行的應用程序,您可以查看一個罐子 Maven 插件

我建議你看看Maven 陰影插件 這會生成一個包含您的項目及其所有依賴項的“uber-jar”。 它還可以執行其他操作,例如設置入口點 class 以使您的 JAR 文件成為可執行的 JAR。

您可能還會發現exec-maven-plugin很有幫助

mvn exec:java -Dexec.mainClass="com.example.Main" [-Dexec.args="argument1"] ...
mvn exec:exec -Dexec.executable="maven" [-Dexec.workingdir="/tmp"] -Dexec.args="-X myproject:dist"

如果您的客戶端無法從 maven m2 repo 像在防火牆后或沒有互聯網連接一樣即時下載依賴項,那么您還需要 package 使用maven-dependency-plugin復制所有依賴項和maven-assembly-plugin以組裝依賴項的依賴項

Phil Sacre 已經很好地解釋了基本問題(基本上沒有關於在哪里可以找到嵌入在您的 Y.jar 中的 X.jar 的信息)。

此外,您還可以查看appassembler-maven-plugin (例如,它可以為您的 Y 項目生成啟動腳本,該腳本已經設置了正確的類路徑)和/或exec-maven-plugin (例如,您可以使用它直接啟動 Y使用 maven 使用正確的類路徑)。

它不起作用,因為 Maven 在構建項目時解決了依賴關系,但不會將所有依賴關系神奇地放在 jar 中。 您應該在類路徑中運行您的應用程序及其所有依賴項:

java -classpath X.jar;Y.jar com.foo.bar.Main

或者您必須自定義 maven jar 插件才能創建可執行的 jar 插件,如此所述。 您也可以使用 maven 程序集插件將所有 Y 項目的依賴項復制到目標目錄,在生成的 Y.jar 旁邊。

項目 Y 中生成的工件僅包含項目 Y 中的構建結果,不包括其依賴項。

如果你想在Y中構建一個JAR,你可以直接執行,你可以考慮使用匯編插件。

例如,為項目 Y 構建 uber-jar 的最簡單方法:

<project>
  ...
  <build>
    ...
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2.1</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        <executions>
          <execution>
            <id>make-all-in-one-jar</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
            ...
</project>

除了正常的工件外,還將創建一個包含依賴項的類等的程序集,適合由 java -jar 執行

訪問http://maven.apache.org/plugins/maven-assembly-plugin/了解更復雜的用法。

暫無
暫無

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

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