我使用应用程序服务器的功能,允许我直接从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
请注意,仅创建一个文件列表(没有文件夹映射)是不够的,例如:
/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,AbstractCopyTask和CopySpecInternal)进行工作,看看你是否可以做任何事情.也许您可以使用CopySpecVisitor或CopySpecListener解决此问题.注意:如果您使用内部API,Gradle不保证在将来的版本中不会破坏它.