我正在尝试构建任务以允许我使用Gradle为我的spring应用程序指定我的个人资料。
buildscript {
ext {
springBootVersion = '2.0.1.RELEASE'
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
}
}
plugins {
id "com.diffplug.gradle.spotless" version "3.10.0"
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'maven'
spotless {
java {
googleJavaFormat()
licenseHeaderFile 'habicus.license.java'
}
}
group = 'com.remindful'
version = '1.0.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile('org.springframework.boot:spring-boot-starter-jersey')
compile('org.springframework.boot:spring-boot-starter-web')
compile('org.springframework.boot:spring-boot-starter-web-services')
compile('org.springframework.boot:spring-boot-starter-websocket')
compile('org.springframework.session:spring-session-core')
compile("com.h2database:h2")
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
compile group: 'com.google.guava', name: 'guava', version: '11.0.2'
testCompile 'junit:junit:4.12'
testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.0.1.RELEASE'
}
// TODO: Add prod profile in application-properties
task prod {
run { systemProperty "spring.profiles.active", "prod" }
}
task dev {
run { systemProperty "spring.profiles.active", "dev" }
}
// To force debug on application boot, switch suspend to y
bootRun {
systemProperties System.properties
jvmArgs=["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"]
}
tasks.bootRun.dependsOn build
bootRun.mustRunAfter dev
我有两个问题:
1)Intellij以黄色波浪线下划线突出显示任务,所以我想知道这里的语法是否错误?
2)我是否使用gradle-wrapper做这样的事情或只是gradle?我想要更好地理解差异。
答案 0 :(得分:1)
1)Intellij以黄色波浪线下划线突出显示任务,所以我想知道这里的语法是否错误?
不幸的是,IntelliJ不完全支持gradle,例如,构建脚本中的ext
块无法正确识别,因此当访问通过ext
块定义的成员时,IntelliJ无法解析其定义&类型。
因此,当IntelliJ显示黄色下划线时,不需要恐慌,您只需要注意gradle
命令报告的错误。如果gradle build
说好,那么一切都很好。
同时,IntelliJ无法静态解析第三方插件,因此它也无法识别这些插件添加的任务和Task
类。在这种情况下,它还会显示这个淡黄色下划线,抱怨类似cannot infer argument type
。
解决方法是refresh all Gradle projects
,点击gradle面板上的刷新按钮,如果你的构建脚本写得正确,这些下划线很可能会消失。这是因为IntelliJ使用Gradle Tooling API嵌入gradle,并且在gradle同步过程中(由refresh all Gradle projects
触发),第三方插件得到解析并构建了整个项目对象模型,因此IntelliJ会知道你的任务没有问题。
如果gradle build
失败,则问题在于您自己的构建脚本。关于如何编写gradle构建脚本&正确完成任务,请参阅Authoring Tasks - Gradle User Manual。
2)我是否使用gradle-wrapper做这样的事情或只是gradle?我想更好地理解其中的差异。
解释了Gradle包装器in the official userguide。简而言之,我会引用:
Wrapper是一个脚本,可以调用Gradle的声明版本,必要时可以预先下载。
因此,如果项目中没有包装器脚本,则应执行gradle wrapper
生成一个,然后将其提交给VCS。之后,无论您以前在命令行中执行gradle <task>
,都可以/应将其替换为./gradlew <task>
(在* nix环境中)或gradlew.bat <task>
(在Windows中)。
直接从命令行使用 gradle
命令和 gradle包装器脚本之间的主要区别在于, gradle包装器脚本<如果没有找到安装的gradle二进制文件,/ strong>将下载gradle二进制文件并使用它来执行gradle构建,而使用 gradle
命令只会导致这种情况下的错误。
此外,当其他人正在使用您的项目时,他/她可以简单地克隆存储库并运行./gradlew build
(在* nix中)或gradlew.bat build
(在Windows中),您的项目将流畅地构建并且成功,无论他/她以前是否安装过gradle分发。