微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何检查Gradle CopySpec以将其导出为文本表示?

我使用应用程序服务器的功能,允许我直接从Gradle的输出文件夹和源文件夹中的静态文件部署资源和类.我不想浪费时间打包到EAR,WAR或JAR,我想在不重新部署的情况下使用类似HotSwap的功能.

让我用一个简单的gradle项目和Tomcat 7来演示这个想法.

假设我们有一个具有以下结构的文件夹:

.
|-- build.gradle
`-- src
    |-- css
    |   `-- main.css
    |-- html
    |   `-- index.html
    `-- images
        `-- logo.png

4 directories, 4 files

我创建了一个简单的gradle项目:

的build.gradle

apply plugin: 'war'

war {
  destinationDir temporaryDir
  into 'meta-inf/resources', {
    from 'src/html/index.html'
  }
  into 'meta-inf/resources/static', {
    from 'src/css'
  }
  into 'meta-inf/resources/static', {
    from 'src/images'
  }
}

那么有能力自动创建以下配置:

$CATALINA_HOME /卡塔利娜/本地主机/ myapp.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="">
  <Resources className="org.apache.naming.resources.VirtualDirContext" extraResourcePaths="
    /meta-inf/resources/index.html=C:/myapp/src/html/index.html,
    /meta-inf/resources/static=C:/myapp/src/css,
    /meta-inf/resources/static=C:/myapp/src/images
  "/>
</Context>

请注意,仅创建一个文件列表(没有文件夹映射)是不够的,例如:

/meta-inf/resources/index.html=C:/myapp/src/html/index.html
/meta-inf/resources/static/main.css=C:/myapp/src/css/main.css,
/meta-inf/resources/static/logo.png=C:/myapp/src/images/logo.png

因为最初的问题陈述意味着有必要在没有重新部署应用程序的情况下创建和删除传入文件夹中的文件.

更新1

在Gradle的github上创建了issue

更新2

请注意,这个例子只是一个虚构的案例来向您展示这个想法.我知道java源路径约定.

我的目标是找到一种自动生成现有大型项目的copySpec映射的方法.我希望为任何开发人员提供添加删除copySpec(或基于copySpec的任务)的能力,而无需了解如何将其转换为应用程序服务器的映射配置.

解决方法:

我能想到的三种方法

>将groovy代码解析为AST并从AST生成xml.这对我来说听起来真的很难
>首先在您自己的自定义模型中定义目录等.然后基于相同的模型生成copySpec和XML.这听起来更容易
>通过内部Gradle API(例如War,AbstractCopyTaskCopySpecInternal)进行工作,看看你是否可以做任何事情.也许您可以使用CopySpecVisitorCopySpecListener解决此问题.注意:如果您使用内部API,Gradle不保证在将来的版本中不会破坏它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐