错误 运行 SpringBoot Jar 使用 init.d

Error Running SpringBoot Jar using init.d

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

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

springBoot{ 可执行=真 }

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即可解决。但是,由于我是 运行 由 gradle 生成的 .jar 我需要在哪里添加此行?或者,我该如何解决上述错误?

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

我认为您需要为源代码使用完整路径(即 /your/full/path/to/myjar.jar)

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

springBoot {
    executable = true
}

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

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

  2. 为了构建完全可执行的 jar,您可以包含此代码

bootJar {

启动脚本() }

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

./gradlew bootRun

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