当前位置: 首页 > 知识库问答 >
问题:

Grails 4级“组装”任务未生成。war.Original归档

董永宁
2023-03-14

我刚刚将Grails web-app从3.2版升级到4.0版。

我在build.gradle中提供了依赖项(相当常见的配置):

dependencies {
    ...
    compile "org.springframework.boot:spring-boot-starter-logging"
    compile "org.springframework.boot:spring-boot-autoconfigure"
    compile "org.springframework.boot:spring-boot-starter-actuator"
    provided "org.springframework.boot:spring-boot-starter-tomcat"
    ...
}

我刚刚注意到,通过执行GradleAssemble任务,我不再获得myapp.war.arrigine归档文件(该文件过去是在没有提供所有libs的情况下构建的),而只获得包含提供的依赖项的文件。

我是不是漏掉了什么?我真的很想在lib提供的文件夹中保留4MB的JAR。提前感谢!

更新1

根据@ck1的建议,我将providedcompile依赖项更改为providedcompile,但结果是相同的。虽然我已经使用了war插件,但我注意到Assemble任务启动的任务顺序是:

> Task :assetCompile
Finished Precompiling Assets
> Task :compileJava
> Task :compileGroovy
> Task :buildProperties
> Task :processResources
> Task :classes
> Task :compileWebappGroovyPages NO-SOURCE
> Task :compileGroovyPages
> Task :compileGsonViews
> Task :findMainClass
> Task :bootWar
> Task :war SKIPPED
> Task :assemble

因此,跳过war任务,转而使用新的bootwar任务(在Gradle 3中不可用,由Grails 3使用)。有办法强迫吗?或者是插件应该已经支持的东西?

更新2

经过一番研究,我添加build.gradle

war {
    enabled = true
}

并且能够执行war任务:

> Task :assetCompile
Finished Precompiling Assets
> Task :compileJava
> Task :compileGroovy
> Task :buildProperties
> Task :processResources
> Task :classes
> Task :compileWebappGroovyPages NO-SOURCE
> Task :compileGroovyPages
> Task :compileGsonViews
> Task :findMainClass
> Task :bootWar
> Task :war           // not skipped
> Task :assemble

我基本上到达了我想要的地方,即在没有提供的所有依赖项的情况下获得一个。war存档;但是与以前不同的是,不是一对。war归档(myapp.warmyapp.war.originent),而是一个名为myapp.war的文件,不包括不需要的东西。

但是我仍然很困惑,因为Spring Boot的Gradle插件文档指出bootwarwar的扩展。

bootRepackage任务已经被分别用于构建可执行JAR和WAR的bootJar和bootWar任务所取代。罐子和战争任务不再涉及。

再说一遍,我错过了什么?

共有1个答案

东方灵均
2023-03-14

您应该用war插件中的providcompileprovidedruntime依赖项配置替换提供的

这两个配置与各自的编译和运行时配置具有相同的作用域,只是它们没有添加到WAR归档中。

参考资料:

https://docs.gradle.org/4.10.2/userguide/war_plugin.html

 类似资料:
  • 我有一个非常基本的多项目分级设置,如下所示: 文件包括这两个子项目。根项目不应用java插件,但两个子项目都应用了。使用时,所有东西都按预期生成。 但是,据我所知,由于我没有在根项目中应用插件,因此它不应该有任务。 的输出显示任务。 但的输出只显示列有和。 所以我的问题是--在这个场景中到底执行了什么?gradle只是找到所有子项目中匹配供应模式的每一个任务吗?是否有关于此任务名称解析的特定规则?

  • 我在以可管理的方式组织构建时遇到了问题。在我的gradle构建中有大量的任务,因为对于每个特定的工作元素,gradle都需要一个这种类型的任务。例如:复制一个文件分级需要复制任务类型,压缩一个文件分级需要压缩任务类型,删除几个文件分级需要删除任务类型。Javadoc、Jar、Ear等也需要它们的任务类型。最终,build有大量的任务,要以特定的顺序运行所有这些任务,我必须使用 将这些规则应用于所有

  • 我刚安装了VSCode,还有这个小小的基本打字应用程序。 第一次,当我想要构建应用程序时,VScode需要生成任务。json。 它在很久以前就起作用了。 今天我收到一条奇怪的信息 未定义生成任务。在tasks.json文件中标记一个任务。 我不记得以前看到过这个消息。 但是,好的,我单击Configure Build Task,选择TypeScript Task,然后单击tasks。生成json。

  • 我为我的项目启用了gradle构建缓存。但是,我们使用了一些非内置任务,例如来自第三方插件的npm-install。Gradle没有为这些任务启用缓存。例如,当执行此类任务时,它会显示如下内容: 有没有办法为此类非内置任务启用生成缓存?

  • 问题内容: 我一般在vaadin框架上有问题。 我创建了一个类来扩展vaadin应用程序(MyFirst),然后用vaadin可视设计器(MyFormApp)创建了一个自定义组件。 我确实实例化了自定义组件MyFormApp,并将其添加到MyFirst的主窗口中。 部署应用程序后,vaadin生成的页面未显示任何组件。 我的代码: 我的第二堂课是MyFirstApp(自定义组件): 在执行serv

  • 我想为一个Android项目创建一个自定义的gradle任务,这将调用其他任务链,取决于构建风格和构建配置。 所以,这就是我在build.gradle.kts中所做的事情(我们使用kotlin脚本) 所以如果我运行./gradlew任务 null