Gradle Ear 插件 : Adding modules without version specifier

标签 gradle groovy jboss ear

我正在尝试组装 耳朵 使用 Gradle,其中 application.xml包含一些非 ejb 模块。相关项目文件是使用 {basename}-{version}.{extension} 生成的。标准,因此看起来像,例如subproject-0.2.6.rar .但是,由于其中一些项目需要标记为 java 或连接器模块,因此我在解决正确文件时遇到了问题。

这是构建脚本的样子:

apply plugin: 'ear'

dependencies {
    deploy project(':EJB-Project')
    deploy project(':Commons')
    deploy project(':UpdateManager')

    earlib 'net.sf:jasperreports:unknown'
    earlib 'org.apache.axis:axis:1.4'
}

ear {
    deploymentDescriptor {
        applicationName = 'EnterpriseProject'

        module('Commons.jar', 'java')
        module('UpdateManager.rar', 'connector')
    }

    // Remove the version postfix from archived files
    rename(/(.*)-${version}(.)/, /$1$2/)
}
jboss-deployment-structure.xml在没有版本说明符的情况下声明了子部署节点中的文件。
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
       ...
    <sub-deployment name="EJB-Project.jar">
        <dependencies />
        <exclusions />
    </sub-deployment>
    <sub-deployment name="Commons.jar">
        <dependencies />
        <exclusions />
    </sub-deployment>
        ...

ear 任务中的 rename 方法成功地重命名了 deploy 中的库。配置,但 Gradle 添加了依赖项,这些依赖项未通过 module(String path, String identifier) 显式添加自动使用其原始名称作为 ejb 模块:
<module>
    <ejb>EJB-Project-4.5.2.jar</ejb>
</module>

我很想以一种干净的方式解决这个问题 - 例如,在模块部分引用项目本身,而不是指定文件名(及其扩展名)并为 JBoss 生成部署 xml,但我不知何故被卡住了。我希望删除所有版本字符串,或保留所有版本字符串。

最佳答案

我在 gradle 6.8 中解决了类似的问题:
我从这里开始:

plugins {
    id 'ear'
}

dependencies {
    deploy      'org.cpp.pp:dmReports:5.04.01-2'
    deploy      project(':reporting-transpoLib')
}

ear {
    deploymentDescriptor {
        module('dmReports-5.04.01-2.jar', 'java')
        module("reporting-transpoLib-${project.version}.jar", 'java')
    }
}
它产生了一个包含带有版本的 jar 和带有版本的部署描述符的耳朵。
但是我还有第二次 war ,在它的部署描述符中指定了对 dmReports 的依赖。
对于通过这个耳朵部署的每个新版本的 dmReports,我还必须更新 war 部署描述符(依赖部分)——这不好。
我需要从耳朵和 war 部署描述符中删除 dmReports 版本。
于是我改成了这个耳朵:
plugins {
    id 'ear'
}

configurations {
    dmReports
    reportingTranspoLib
}

dependencies {
    dmReports          'org.cpp.pp:dmReports:5.04.01-2'
    reportingTranspoLib project(':reporting-transpoLib')
}

// copyToLib task copies the dependencies and rename them (remove version) in a separate 
// folder: ${buildDir}/lib. This folder will be used as input for deploy configuration

task copyToLib {
    dependsOn(':reporting-transpoLib:build')

    doFirst {
        def  configNames = [ 'dmReports', 'reportingTranspoLib']
        configNames.each { configName ->
            configurations.getByName(configName).resolvedConfiguration.resolvedArtifacts.each { artifact ->
                project.copy {
                    from artifact.file
                    into "${buildDir}/lib"
                    rename { "${artifact.name}.${artifact.extension}" }
                }
            }
        }
    }
}

// the output of copyToLib task (folder ${buildDir/lib}) is taken and used by configuration deploy

dependencies {
    deploy files("${buildDir}/lib")
}


ear {
    dependsOn(copyToLib)
//    from(copyToLib)
    deploymentDescriptor {
        module('dmReports.jar', 'java')
        module("reporting-transpoLib.jar", 'java')
    }
}
所以我得到了一个包含没有版本的 jar 和没有版本的部署描述符的耳朵。
非常有用。

关于Gradle Ear 插件 : Adding modules without version specifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42301666/

相关文章:

groovy - Gradle Native - 在存储库中动态添加库

grails - 访问静态约束时出现NullPointerException

java - 将 infinispan 缓存注入(inject) wildfly 8.0.0.Final

android - Gradle 'demo' 项目刷新失败 : Could not fetch model of type 'IdeaProject' using Gradle installation

android - 任务 ':android:lint'的执行失败无法初始化类com.sun.imageio.plugins.jpeg.JPEGImageReader

jenkins - 我可以使用闭包来定义 Jenkins 声明式管道中的阶段吗?

grails - 如何自动注销选择删除其帐户的登录用户?

java - 在 JBoss 5.1 中的队列中查找 JMS 消息的简单 Web 应用程序

linux - 使用 Eclipse 外部工具配置复制所有相同类型的文件

java - 从任务中调用任务的替代方案,Gradle