Spring jar 和构建 jar 的任务之间的引导问题:Gradle
Spring Boot Issue between jar and task that build jar: Gradle
现在我遇到这个问题,我需要将我的 SpringBoot 应用程序转换为可执行 jar,但它需要在任务中完成,而不仅仅是 gradle.build 中的配置。
因此我的 build.gradle
中的以下代码片段将生成一个可执行 jar:
jar {
manifest {
attributes 'Main-Class': 'com.path.name.to.main.App'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
一切正常,但是当我将 jar 创建作为一项任务时,jar 不再可执行并抛出此错误 错误:无法找到或加载主程序 class com.path.name.to.main.App
:
task makeJar(type: Jar) {
archiveName = 'app.jar'
manifest {
attributes 'Main-Class': 'com.path.name.to.main.App'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
我公司进行部署的方式建议在 build.gradle
的任务中创建 jar,而不是上面提到的配置。
但是,我不太确定为什么将它从 jar
配置移动到任务会影响实际创建的 jar 的结果,我需要做什么来解决这个问题?
首先,您所说的 jar
配置实际上是 Jar
类型的任务,它只是由 Gradle 创建(很可能是由 Java plugin).查看有关由应用于构建脚本的插件创建的任务的文档。
例如,您可以在创建任务 jar
后以与任务 jar
相同的方式访问您的任务 makeJar
:
task makeJar(type: Jar)
makeJar {
// configuration things
}
The way my company does deployments it is advisable to have the jar creation in a task in the build.gradle
as opposed to the configuration mentioned above.
知道jar
也是一个任务,说明你们公司的这个部署策略根本就没有意义。您可以像手动创建任务一样配置和使用任务 jar
。
但是,有时生成仅包含项目 类 的 JAR 文件和可执行 JAR 是有意义的。由于 jar
任务已经产生了第一个,我们需要另一个任务来产生第二个。可执行 JAR 也称为 fat oder uber JAR,实际上有一个 really good plugin 来创建它们。
您实际问题的根源在于任务 jar
,因为它是由 Java 插件创建的,所以您的任务 makeJar
会自动应用一些配置丢失的。使用 from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
行,compile
配置中的所有项目依赖项都添加到 JAR 中,但是您自己项目中的代码丢失了。以下代码添加常规 jar
任务的内容:
task makeJar(type: Jar) {
archiveName = 'app.jar'
manifest {
attributes 'Main-Class': 'com.path.name.to.main.App'
}
with jar
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
现在我遇到这个问题,我需要将我的 SpringBoot 应用程序转换为可执行 jar,但它需要在任务中完成,而不仅仅是 gradle.build 中的配置。
因此我的 build.gradle
中的以下代码片段将生成一个可执行 jar:
jar {
manifest {
attributes 'Main-Class': 'com.path.name.to.main.App'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
一切正常,但是当我将 jar 创建作为一项任务时,jar 不再可执行并抛出此错误 错误:无法找到或加载主程序 class com.path.name.to.main.App
:
task makeJar(type: Jar) {
archiveName = 'app.jar'
manifest {
attributes 'Main-Class': 'com.path.name.to.main.App'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
我公司进行部署的方式建议在 build.gradle
的任务中创建 jar,而不是上面提到的配置。
但是,我不太确定为什么将它从 jar
配置移动到任务会影响实际创建的 jar 的结果,我需要做什么来解决这个问题?
首先,您所说的 jar
配置实际上是 Jar
类型的任务,它只是由 Gradle 创建(很可能是由 Java plugin).查看有关由应用于构建脚本的插件创建的任务的文档。
例如,您可以在创建任务 jar
后以与任务 jar
相同的方式访问您的任务 makeJar
:
task makeJar(type: Jar)
makeJar {
// configuration things
}
The way my company does deployments it is advisable to have the jar creation in a task in the
build.gradle
as opposed to the configuration mentioned above.
知道jar
也是一个任务,说明你们公司的这个部署策略根本就没有意义。您可以像手动创建任务一样配置和使用任务 jar
。
但是,有时生成仅包含项目 类 的 JAR 文件和可执行 JAR 是有意义的。由于 jar
任务已经产生了第一个,我们需要另一个任务来产生第二个。可执行 JAR 也称为 fat oder uber JAR,实际上有一个 really good plugin 来创建它们。
您实际问题的根源在于任务 jar
,因为它是由 Java 插件创建的,所以您的任务 makeJar
会自动应用一些配置丢失的。使用 from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
行,compile
配置中的所有项目依赖项都添加到 JAR 中,但是您自己项目中的代码丢失了。以下代码添加常规 jar
任务的内容:
task makeJar(type: Jar) {
archiveName = 'app.jar'
manifest {
attributes 'Main-Class': 'com.path.name.to.main.App'
}
with jar
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}