Gradle ear 放的是 JAR 而不是 WAR

Posted

技术标签:

【中文标题】Gradle ear 放的是 JAR 而不是 WAR【英文标题】:Gradle ear is putting JAR instead of WAR 【发布时间】:2013-02-27 22:26:33 【问题描述】:

我正在尝试使用 Gradle 构建 ear。 我的项目树如下:

/project
|
|--> /web-application
|    |
|    |--> /src (stuff of web app)
|    |
|    |--> build.gradle
|
|--> build-gradle
|--> settings.gradle

我正在尝试使用 ear 插件 生成耳朵,但是当我执行 gradle assemble 时,我在 build 下创建了 war web-application 的 em> 目录,但是在生成的 ear 里面我有一个 web 应用程序的 jar。 gradle 的配置文件很简单,这里是:

project/build.gradle

apply plugin: 'ear'

repositories 
    mavenCentral()


dependencies 
    deploy project(':web-application')
    earlib group: 'log4j', name: 'log4j', version: '1.2.15', ext: 'jar'

项目/web-application/build.gradle

apply plugin: 'war'

repositories 
   mavenCentral()


dependencies 
    compile group: 'log4j', name: 'log4j', version: '1.2.15', ext: 'jar'

我做错了什么?

我注意到war插件的捆绑样本也有同样的问题...... 提前致谢

【问题讨论】:

【参考方案1】:

您可以避免为每个 deploy 依赖项指定配置,使用如下方式:

allprojects 
  plugins.withType(WarPlugin) 
    // Set default configuration as WAR archive if WAR plugin is used
    configurations 
      'default' 
        extendsFrom = [archives]
      
    
  


...

dependencies 
  deploy project(':web-application')

【讨论】:

【参考方案2】:

解决了!

需要在EAR项目中配置WAR模块为:

dependencies 
    deploy project(path:':web-application', configuration:'archives')
    earlib group: 'log4j', name: 'log4j', version: '1.2.15', ext: 'jar'

【讨论】:

文档中有参考吗? 我不记得我在哪里采用了那个解决方案,而且文档有点混乱...... 配置文档:gradle.org/docs/current/dsl/…

以上是关于Gradle ear 放的是 JAR 而不是 WAR的主要内容,如果未能解决你的问题,请参考以下文章

idea gradle工程怎么打jar包

使用 gradle bootJar 而不是 jar 任务并在 Jenkins 中构建失败

如何使用shadowJar gradle插件而不是maven发布将胖JAR发布到JitPack

如何使用 Gradle 中的本地 JUnit Jar 而不是 Maven Central?

WAR/JAR/EAR 中的 MANIFEST.MF 有啥用?

更新 Spring Boot 以生成 WAR 文件而不是 JAR 文件