我有一个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
,我需要在哪里添加此行?或者,我该如何解决上述错误?
答案 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)
通过命令行执行应用程序的方法之一。
当您拥有apply plugin:'java'
时,弹簧会寻找bootJar并默认禁用Jar任务。
要构建完全可执行的jar,则可以包含以下代码
bootJar {
launchScript() }
然后清理您的构建并运行一次bootJar任务。稍后导航至gradle文件夹并运行
./gradlew bootRun
这将运行您的spring-boot应用程序。我认为还有许多其他方式,例如java -jar <yourapplication.jar>
。但是我遵循这种方式。希望对您有所帮助。