spring-boot - jar和构建jar的任务之间的Spring Boot问题: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 不再可执行并抛出此错误错误:无法找到或加载主类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) } }
}
我公司的部署方式建议在任务中创建 jar,build.gradle
而不是上面提到的配置。
但是,我不确定为什么将它从jar
配置移到任务会影响创建的实际 jar 的结果,我需要做些什么来解决这个问题?
解决方案
首先,jar
您所说的配置实际上是 type 的任务Jar
,它只是由 Gradle 创建的(很可能是由它的Java 插件创建的)。查看有关由应用于构建脚本的插件创建的任务的文档。
例如,您可以在创建makeJar
任务后以与任务相同的方式访问您的任务jar
:
task makeJar(type: Jar)
makeJar {
// configuration things
}
我公司的部署方式建议在任务中创建 jar,
build.gradle
而不是上面提到的配置。
知道这jar
也是一项任务,表明您公司的这种部署策略根本没有意义。jar
您可以像手动创建任务一样配置和使用该任务。
但是,有时同时生成仅包含项目类和可执行 JAR 的 JAR 文件是有意义的。由于jar
任务已经产生了第一个,我们需要另一个任务来产生第二个。可执行的 JAR 也称为 fat oder uber JAR,实际上有一个非常好的插件可以创建它们。
您的实际问题的根源是 task 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) } }
}
推荐阅读
- java - javax.naming.ServiceUnavailableException:套接字关闭
- dependency-injection - 如何在 Google Guice 中注入具有名称模式或正则表达式的属性列表?
- aws-sam-cli - SAM 构建仅使用 --use-container 参数成功完成
- .htaccess - .htaccess 重定向没有 WWW 到 HTTPS 不起作用
- smarty - 是否可以检查是否定义了(变量)修饰符(函数)?
- html - 垂直对齐似乎会影响兄弟元素的位置
- html - MySQL 到 InnerHtml Angular 7
- php - Onlinenic API v4
- r - 如何从 R 中的两个不同来源更新 numericInput?
- python - 为 IntelliJ IDEA 社区版安装 Python 3 插件