簡體   English   中英

(springboot)jar無法在其他計算機上執行

[英](springboot) jar not executable on other computers

我有一個Spring Boot應用程序。 我用maven打包,並用java -jar xxx.jar執行它。 該應用程序正在運行。 但是,如果將jar復制到另一台機器(相同的Java版本,相同的操作系統)上,則會出現依賴項錯誤:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name
'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration':...
...
Unsatisfied dependency expressed through constructor parameter 0 
...
Bean instantiation via factory method failed
...
 Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: 
Failed to instantiate [javax.sql.DataSource]: 
Factory method 'dataSource' threw exception; nested exception is java.lang.NullPointerException

我添加了debug = true以在執行期間顯示類路徑,但是兩台機器上似乎都一樣(maven執行和Java執行之間的類路徑順序存在問題)

編輯:實際上問題不在於更換機器:如果我只是將罐子移到另一個文件夾中,則會收到相同的錯誤。 如果我看正確的運行過程,則很明顯在類路徑中有對無法滿足的項目目標文件夾的引用。

原始機器是iOS,我在其他iOS和Centos機器上嘗試了jar,結果相同。

我以為jar可以很容易地部署,所以我不知道是否有更好的方法來部署應用程序或某些我沒有考慮的環境變量

編輯:我使用Maven。 我做

mvn package

或mvn全新安裝

我有答案中提到的依賴項

   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
   </dependency>

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

您需要創建一個Fat jar (具有所有依賴項的jar文件),您可以在此處找到更詳細的信息,但要在答案中添加一些代碼:

基本上,您要做的就是檢查pom中是否具有正確的依賴項

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.0.1.RELEASE</version>
    </dependency>
</dependencies>

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.0.1.RELEASE</version>
    </plugin>
</plugins>

那你應該做

mvn clean install

並運行它!

java -jar <artifact-name> 

編輯

重新包裝后會看到什么? mvn clean package spring-boot:repackage

您的HibernateJpaConfiguration bean無法創建。 看起來它具有在@Configuration注釋的類或application.properties資源文件中聲明的某些屬性。 某些具有相對路徑的屬性,當您移動jar時,找不到該屬性。

實際上,這是一個瑣碎的問題:必須從相對路徑中列出目錄,然后才能在其他地方執行jar,我只需要創建該目錄即可。

錯誤未正確捕獲,因此stacktrace在依賴項中顯示失敗,因此我錯過了簡單的現實:java.lang.NullPointerException ....

感謝@AndyWilkinson讓我再次閱讀stacktrace ...

暫無
暫無

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

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