使用init.d运行SpringBoot Jar时出错

时间:2016-04-26 14:54:07

标签: java gradle jar spring-boot init.d

我有一个SpringBoot应用程序,我使用gradle :myapp:jar生成一个可执行jar。另外,我还必须使用chmod 755 myapp.jar来使jar可执行。

这是用于生成jar的gradle代码,as described here

springBoot {     executable = true }

springBoot {
    executable = true
}

jar {
    baseName = 'myapp'
    version = '0.1.0'
    manifest {
        attributes "Main-Class": "eu.myapp.Application"
    }

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

然后我创建了一个符号链接到init.d,as described here以便使用start / stop / status。我正在执行创建符号链接的命令是:

sudo ln -fs myjar.jar /etc/init.d/myjar

在此之后,我可以这样做:

sudo /etc/init.d/myapp start

问题在于,当我执行此命令时,出现以下错误:

/etc/init.d/myapp: 1: /etc/init.d/myapp: PK: not found
/etc/init.d/myapp: 2: /etc/init.d/myapp�z�H: not found
/etc/init.d/myapp: 3: /etc/init.d/myapp: Syntax error: ")" unexpected

在线查找it appears to be related to a shebang issue,可以通过在文件开头添加#!/bin/bash来解决此问题。但是,由于我正在运行由.jar生成的gradle我需要在哪里添加此行?或者,我该如何解决上述错误?

3 个答案:

答案 0 :(得分:4)

jar任务不会产生适合通过init.d启动的完全可执行的jar。相反,您需要运行Spring Boot的Gradle插件提供的bootRepackage任务,您还需要配置它以生成完全可执行的jar。为此,请将以下内容添加到build.gradle

springBoot {
    executable = true
}

答案 1 :(得分:0)

  

sudo ln -fs myjar.jar /etc/init.d/myjar

我相信您需要为您的来源使用完整路径(即/your/full/path/to/myjar.jar)

答案 2 :(得分:0)

通过命令行执行应用程序的方法之一。

  1. 当您拥有apply plugin:'java'时,弹簧会寻找bootJar并默认禁用Jar任务。

  2. 要构建完全可执行的jar,则可以包含以下代码

bootJar {

launchScript() }

然后清理您的构建并运行一次bootJar任务。稍后导航至gradle文件夹并运行

./gradlew bootRun

这将运行您的spring-boot应用程序。我认为还有许多其他方式,例如java -jar <yourapplication.jar>。但是我遵循这种方式。希望对您有所帮助。