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

使用当前WAR文件名分级ear更新application.xml

颜熙云
2023-03-14

我有一个java EAR项目,其中包含一些WAR Web应用程序。

uberApp
|
\---> WarA
|     |
|     ...<src and config>
|
\---> WarB
|     |
|     ...<src and config>
|
\--> config/META-INF/application.xml
apply plugin: 'ear'


dependencies {
    deploy project(path: ':WarA/trunk', configuration: 'archives')
    deploy project(path: ':WarB/trunk', configuration: 'archives')

}

ear {
    appDirName 'config'
}

这是战争建筑。格拉德尔:

war {
    baseName = 'WarA'
    version = '1.2.3_rev'  + getSvnRevision() // provided by SvnKit
}

...因此结果文件名始终包含手写版本号和SVN提交号:wara-1.2.3_rev31337.war

但是在组装ear之前,我需要使用正确的WAR文件名inside标记更新我的application.xml

<?xml version="1.0"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6">
  <module>
    <web>
      <web-uri>WarA.war</web-uri>
      <context-root>/WarA</context-root>
    </web>
  </module>
  <module>
    <web>
      <web-uri>WarB.war</web-uri>
      <context-root>/WarB</context-root>
    </web>
  </module>
  <library-directory>lib</library-directory>
</application>

共有1个答案

公孙胡媚
2023-03-14

也许有更好的方法,但我通过编写一个groovy函数来完成EAR构建过程中的工作,从而达到了我的目的。

这是我的完整build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        // SvnKit from https://gist.github.com/thombergs/9279728
        classpath group: 'org.tmatesoft.svnkit', name: 'svnkit', version: '1.8.14'
    }
}


// SvnKit get svn revision
import org.tmatesoft.svn.core.wc.*
def getSvnRevision(){
        ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
        SVNClientManager clientManager = SVNClientManager.newInstance(options);
        SVNStatusClient statusClient = clientManager.getStatusClient();
        SVNStatus status = statusClient.doStatus(projectDir, false);
        SVNRevision revision = status.getRevision();
        return revision.getNumber();
        }




// extract from file
def extractfromfile(source, pattern) {
  (source.text =~ pattern) [0]
}

// extract from string
def extract(source, pattern) {
  (source =~ pattern) [0]
}

// replace
def ReplaceText(source, targetText, replaceText){
  source.write(source.text.replaceAll(targetText, replaceText))
}


def updateApplicationXml() {
  def applicationXml = new File('config/META-INF/application.xml')
  def settingsGradle = new File('settings.gradle')
  def prjRegex = "'(.*)'"
  def prj =  settingsGradle.text.split(',')



  //for every project
  List<String> list = new ArrayList<String>(Arrays.asList(prj))

  for(String item: list){

    def prjPath = extract(item, prjRegex)[1]
    //println prjPath


    //search for build.gradle
    def buildGradle = new File(prjPath+'/build.gradle')
    def basenamePattern = "baseName = '(.*)'"
    def versionPattern = "version = '(.*)'"

    //extract basename
    def basename
    try {
      basename = extractfromfile(buildGradle, basenamePattern)
    } catch (Exception ex){
        continue
    }

    //extract version
    def version
    try {
      version = extractfromfile(buildGradle, versionPattern)
    } catch (Exception ex){
        continue
    }

    def warname = basename[1] + "-" + version[1] + getSvnRevision()

  //  println basename[1]
  //  println version[1]
  //  println warname
  //  println applicationXml


    // do the replace
    ReplaceText(applicationXml, "<web-uri>"+basename[1]+"(.*).war</web-uri>", "<web-uri>"+warname+".war</web-uri>")

  }
}

apply plugin: 'ear'

dependencies {
    deploy project(path: ':WarA/trunk', configuration: 'archives')
    deploy project(path: ':WarB/trunk', configuration: 'archives')

}



ear {
    updateApplicationXml()
    appDirName 'config'
}
 类似资料:
  • 问题内容: .war和.ear文件有什么区别? 问题答案: 在J2EE应用程序中,模块根据其功能打包为EAR,JAR和WAR。 JAR:包含企业Java Bean(类文件)和EJB部署描述符的EJB模块打包为具有.jar扩展名的JAR文件。 WAR:包含Servlet类文件,JSP文件,支持文件,GIF和HTML文件的Web模块打包为具有.war(Web存档)扩展名的JAR文件。 EAR:以上所有

  • 我需要制作一个现有war文件的副本,并更新其中的一个xml文件。我对如何做到这一点的想法是: 从现有WAR中提取文件 替换文件中的字符串 复制警告 将修改的文件添加回复制的WAR

  • cmf_update_current_user($user) 功能 更新当前登录前台用户的信息 参数 $user: array 前台用户的信息 返回 无

  • X1.0新增 sp_update_current_user($user) 功能: 更新session里当前登录用户的信息 参数: $user:当前登录用户的最新信息 返回: 无

  • 我已经用UUID作为每个文件名的密钥将文件上传到s3 bucket,我要求将文件密钥作为存储的UUID,但当下载时,我需要将下载的文件名作为实际文件名,例如:foo.png aws S3-0E8221B9-9BF4-49D6-B0C0-D99E86F91F8E.png上存储的文件下载文件名应为:foo.bar 我尝试过设置Content-Disposition元数据,但在下载文件时仍然包含UUID

  • 问题内容: 有人可以向我解释如何将WAR文件添加到EAR吗?我有一个已经包含一个WAR文件的EAR文件,我有另一个我想添加到该EAR的WAR文件,因此它可以同时包含两个WAR并正常工作。 我不知道该怎么做,但我认为可以手动更改EAR中包含的application.xml文件。 谢谢! 问题答案: 假设EAR文件中尚未包含WAR文件,则可以使用常见的zip实用程序在EAR文件中添加WAR文件。 请注