(springboot)jar无法在其他计算机上执行

时间:2018-06-28 16:57:21

标签: java spring-boot

我有一个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执行之间的类路径顺序存在问题)

编辑:实际上问题不在于更换机器:如果我只是将jar移到另一个文件夹中,则会收到相同的错误。如果我看正确的运行过程,则很明显在类路径中有对无法满足的项目目标文件夹的引用。

原始机器是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>

3 个答案:

答案 0 :(得分:2)

您需要创建一个 Fat jar (具有所有依赖项的jar文件),您可以找到更详细的信息here,但要在答案中添加一些代码:< / p>

基本上,您要做的是检查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

答案 1 :(得分:0)

无法创建您的HibernateJpaConfiguration bean。看起来它具有在@Configuration带注释的类或application.properties资源文件中声明的某些属性。一些具有相对路径的属性,当您移动jar时,找不到该属性。

答案 2 :(得分:0)

实际上,这是一个琐碎的问题:必须从相对路径中列出目录,然后才能在其他地方执行jar,我只需要创建该目录即可。

没有正确捕获错误,因此stacktrace在依赖项中显示失败,我错过了简单的现实:java.lang.NullPointerException ....

感谢@AndyWilkinson让我再次阅读了堆栈跟踪...