(springboot) jar не исполняется на других компьютерах - PullRequest
0 голосов
/ 28 июня 2018

У меня есть приложение 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 очень переносим для развертывания, поэтому я не понимаю, есть ли лучший способ развертывания приложения или какой-либо переменной среды, которую я не принимаю во внимание

РЕДАКТИРОВАТЬ: я использую Maven. Я делаю

mvn package

или mvn clean install

и у меня есть зависимости, упомянутые в ответе

   <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>

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Ваш боб HibernateJpaConfiguration не может быть создан. Похоже, у него есть свойство, объявленное в аннотированном классе @Configuration или в файле ресурсов application.properties. Некоторое свойство, в котором есть относительный путь, и когда вы перемещаете банку, оно не может найти это свойство.

0 голосов
/ 29 июня 2018

На самом деле это была тривиальная проблема: каталог должен был быть указан по относительному пути, и чтобы выполнить jar где-то еще, мне просто нужно было создать этот каталог.

Ошибка не была правильно отловлена, поэтому трассировка стека показала сбой в зависимостях, и я упустил простую реальность: java.lang.NullPointerException ....

Спасибо @AndyWilkinson за то, что заставил меня снова прочитать трассировку стека ...

0 голосов
/ 28 июня 2018

Вам нужно создать Fat jar (файл jar со всеми зависимостями), вы можете найти более подробную информацию здесь , но чтобы в ответе был какой-то код:

По сути, вам нужно убедиться, что у вас есть правильные зависимости в вашей поме

<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> 

EDIT

Что вы видите, если делаете переупаковку? mvn clean package spring-boot:repackage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...