Java gradle build<;配置名称>;:ear和war的不同包装(gradle v2.3)

Java gradle build<;配置名称>;:ear和war的不同包装(gradle v2.3),java,gradle,war,ear,Java,Gradle,War,Ear,我想使用gradle v2.3配置以两种方式打包我的应用程序: ear在ear的lib目录中包含所有lib,在ear中包含多个WAR(使用providedCompile和earlib声明的DEP) 多个war文件,WEB-INF/lib中的每个war中都包含lib(用compile声明的DEP) 如果每次需要不同的打包时都修改build.gradle文件,则可以执行这两项任务中的每一项。 我想通过使用gradlebuild使用配置来选择JAR是否包含在war文件中 基于帮助,我编写了以下文件(这

我想使用gradle v2.3配置以两种方式打包我的应用程序:

  • ear在ear的lib目录中包含所有lib,在ear中包含多个WAR(使用providedCompile和earlib声明的DEP)
  • 多个war文件,WEB-INF/lib中的每个war中都包含lib(用compile声明的DEP)
  • 如果每次需要不同的打包时都修改build.gradle文件,则可以执行这两项任务中的每一项。 我想通过使用
    gradlebuild
    使用配置来选择JAR是否包含在war文件中

    基于帮助,我编写了以下文件(这是为其中一场战争编写的):

    问题在于命令
    gradle buildpackWar
    gradle buildpackEar
    会产生不包括来自
    Common
    项目的JAR的同等战争。 如果我将packEar的配置从
    providedCompile
    更改为
    compile
    ,两者都会产生包含JAR的war

    附加信息:我试着使用compile/providedCompile中的
    extenddfrom,但似乎没有任何影响。我包括了
    buildpackWar
    buildpackEar
    方法,但这两种方法都不起作用(可能是我用错了它们)

    谢谢你的回答

    致以最良好的祝愿,
    Ziga

    compile
    providedCompile
    是它们自己的配置,因此您将公共项目添加到这些配置中,而不是
    packWar
    packEar
    配置中。这样的事情应该行得通:

    项目
    mywar
    项目
    myear
    它将产生三个主要工件:

    • mywar.war
      ,它不包含
      shareable
      中的任何依赖项(如
      common
    • mywar standalone.war
      ,它在
      shareable
    • myear.ear
      ,它在根目录中包含
      mywar.war
      (技术上是
      mywar.jar
      )以及
      /lib
      下的
      mywar
      项目中的
      shareable
      中的依赖项(例如
      common

    使用我提供的信息,我成功地生成了一个工作配置,它只需要一些小的调整。这是文件

    ACL war

    apply plugin: 'war'
    
    apply plugin: 'eclipse-wtp'
    
    configurations {
        shareable
        publishedWar // need this so war gets placed in ear instead of jar, 
                     // using archives puts both wars in ear
    }
    
    dependencies {
        providedCompile project(':Common');
        shareable project(':Common');
    }
    
    war {
        baseName = war.baseName + '-thin'
        classpath = war.classpath
    }
    
    task standaloneWar(type: War, dependsOn: war) {
        baseName = project.name  // sharable war's name without modifications
        classpath = war.classpath + configurations.shareable
    }
    
    artifacts {
        archives standaloneWar
        publishedWar war // to be included in ear
    }   
    
    注:

  • 如果
    提供了编译项目(':Common')被省略,这将不会
    编撰
  • 我添加了战争{…},这样我就可以重新命名这场战争了 包含任何依赖项,并具有 包含名称中没有修改的依赖项
  • 耳朵

    apply plugin: 'ear'
    
    evaluationDependsOn ':ACL' // probably not needed
    
    dependencies {
        deploy project(path: ':ACL', configuration: 'publishedWar')
        earlib project(path: ':ACL', configuration: 'shareable')
    }  
    
    ear {
        deploymentDescriptor {  
            webModule ('ACL-thin.war', "${project.name}/ACL") // set context root        
        }
    } 
    
    注:

  • 如果未应用publishedWar配置,则将jar放置在ear中
  • 如果使用存档两场战争都能在耳朵里找到位置
  • 如果您使用Eclipse插件,考虑更改<代码> AcLyb项目(路径::ACL,配置:“可共享”)<代码> >更改为<代码> Endob Project(':Cudio),或者您将不得不修改Eclipse中的部署程序集(战争将包含在Eclipse 的EAR LIB文件夹中)
    apply plugin: 'ear'
    apply plugin: 'java'
    
    evaluationDependsOn ':mywar'
    
    repositories {
        jcenter()
    }
    
    dependencies {
        deploy project(':mywar')
        earlib project(path: ':mywar', configuration: 'shareable')
    }
    
    apply plugin: 'war'
    
    apply plugin: 'eclipse-wtp'
    
    configurations {
        shareable
        publishedWar // need this so war gets placed in ear instead of jar, 
                     // using archives puts both wars in ear
    }
    
    dependencies {
        providedCompile project(':Common');
        shareable project(':Common');
    }
    
    war {
        baseName = war.baseName + '-thin'
        classpath = war.classpath
    }
    
    task standaloneWar(type: War, dependsOn: war) {
        baseName = project.name  // sharable war's name without modifications
        classpath = war.classpath + configurations.shareable
    }
    
    artifacts {
        archives standaloneWar
        publishedWar war // to be included in ear
    }   
    
    apply plugin: 'ear'
    
    evaluationDependsOn ':ACL' // probably not needed
    
    dependencies {
        deploy project(path: ':ACL', configuration: 'publishedWar')
        earlib project(path: ':ACL', configuration: 'shareable')
    }  
    
    ear {
        deploymentDescriptor {  
            webModule ('ACL-thin.war', "${project.name}/ACL") // set context root        
        }
    }