gpt4 book ai didi

java - 如何正确创建 Gradle 任务?

转载 作者:行者123 更新时间:2023-11-30 06:12:18 26 4
gpt4 key购买 nike

我正在尝试构建任务,以允许我使用 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 ?我试图更好地理解其中的差异。

最佳答案

1) Intellij highlight the tasks with yellow squiggly underline, so I'm wondering if the syntax here is wrong?

不幸的是,IntelliJ 并不完全支持 gradle,例如 ext构建脚本中的 block 无法正确识别,因此在访问通过 ext 定义的成员时 block ,IntelliJ 无法解析其定义和类型。

所以当IntelliJ显示黄色下划线时不必 panic ,只需要注意 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) Do I use gradle-wrapper for something like this or just gradle? I'm trying to better understand the difference.

Gradle 包装器解释 in the official userguide 。简而言之,我想引用:

The Wrapper is a script that invokes a declared version of Gradle, downloading it beforehand if necessary.

因此,如果您的项目中没有包装器脚本,则应该执行 gradle wrapper生成一个,然后将其提交到您的 VCS。之后,无论您之前执行 gradle <task> 的位置在命令行中,您可以/应该将其替换为 ./gradlew <task> (在 *nix 环境中)或 gradlew.bat <task> (在 Windows 中)。

使用gradle之间的主要区别直接从命令行命令gradle包装脚本是,gradle包装脚本将下载gradle二进制文件并使用它来执行gradle构建(如果没有)找到已安装的 gradle 二进制文件,同时使用gradle在这种情况下,命令只会导致错误。

此外,当其他人使用您的项目时,他/她可以简单地克隆存储库并运行 ./gradlew build (在 *nix 中)或 gradlew.bat build (在 Windows 中),无论他/她之前是否安装了 gradle 发行版,您的项目都将流畅且成功地构建。

关于java - 如何正确创建 Gradle 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49963022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com