Gradle 在多个 Eclipse WTP 项目之间共享资源
Sharing resources between multiple Eclipse WTP projects with Gradle
我正在尝试一种模块化的 Eclipse (Mars) 设置,其中一个项目中的核心资源被不同的子项目使用。
core/
src
main/
webapp/
js/
subfolder
another-core.js
core.js
css/
default.css
child/
src/
main/
webapp/
js/
project.js
WEB-INF/
project.html
.settings/org.eclipse.wst.common.component
看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="2.0">
<wb-module deploy-name="child">
<property name="context-root" value="child"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<wb-resource deploy-path="/" source-path="../core/src/main/webapp/"/>
</wb-module>
</project-modules>
Eclipse 将以下结构部署到其 wtpwebapps 文件夹,即仅来自核心的顶级目录。我期望 css/ 包含 default.css 和 js/ 包含 core.js 和 project.js
child/
css/ <== must have come from core
js/
project.js
WEB-INF/
project.html
如果我更改 .settings 以明确列出文件夹,那么它将按预期工作,合并仅在顶层再次放置的文件夹
<wb-resource deploy-path="/" source-path="../core/src/main/webapp/"/>
<wb-resource deploy-path="/js" source-path="../core/src/main/webapp/js"/>
<wb-resource deploy-path="/css" source-path="../core/src/main/webapp/css"/>
wtpwebapps/内容
child/
css/
default.css
js/
core.js
project.js
subfolder/ <== missing another-core.js
WEB-INF/
project.html
有没有办法让 eclipse 在不单独列出所有文件夹的情况下执行此操作?
外部 wb 资源的另一个限制是当它们重叠时,例如包括 "js/subfolder" 和 "js/" Eclipse 会自动删除 "js/subfolder"
我认为这是可能的唯一方法是使用链接资源,因为它们支持完全递归的源目录,这与仅包含其顶级的相对路径不同。但是 Gradle 似乎有一个问题,如果包含如下链接的资源被排除在外:
eclipse.project {
linkedResource name: 'core', type: '2', location: new File(project(':core').projectDir, "src/main/webapp").absolutePath
}
eclipse {
wtp {
component {
resource sourcePath: "/core", deployPath: '/'
}
}
}
但是,有一个 withXml 钩子可以用来将正确的 XML 强制转换为 org.eclipse.wst.common.component.xml
eclipse {
wtp {
component {
file {
withXml {
def node = it.asNode().children()[0]
node.appendNode('wb-resource', ["deploy-path": '/', "source-path": '/core'])
}
}
}
}
}
我正在尝试一种模块化的 Eclipse (Mars) 设置,其中一个项目中的核心资源被不同的子项目使用。
core/
src
main/
webapp/
js/
subfolder
another-core.js
core.js
css/
default.css
child/
src/
main/
webapp/
js/
project.js
WEB-INF/
project.html
.settings/org.eclipse.wst.common.component
看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="2.0">
<wb-module deploy-name="child">
<property name="context-root" value="child"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
<wb-resource deploy-path="/" source-path="src/main/webapp"/>
<wb-resource deploy-path="/" source-path="../core/src/main/webapp/"/>
</wb-module>
</project-modules>
Eclipse 将以下结构部署到其 wtpwebapps 文件夹,即仅来自核心的顶级目录。我期望 css/ 包含 default.css 和 js/ 包含 core.js 和 project.js
child/
css/ <== must have come from core
js/
project.js
WEB-INF/
project.html
如果我更改 .settings 以明确列出文件夹,那么它将按预期工作,合并仅在顶层再次放置的文件夹
<wb-resource deploy-path="/" source-path="../core/src/main/webapp/"/>
<wb-resource deploy-path="/js" source-path="../core/src/main/webapp/js"/>
<wb-resource deploy-path="/css" source-path="../core/src/main/webapp/css"/>
wtpwebapps/内容
child/
css/
default.css
js/
core.js
project.js
subfolder/ <== missing another-core.js
WEB-INF/
project.html
有没有办法让 eclipse 在不单独列出所有文件夹的情况下执行此操作?
外部 wb 资源的另一个限制是当它们重叠时,例如包括 "js/subfolder" 和 "js/" Eclipse 会自动删除 "js/subfolder"
我认为这是可能的唯一方法是使用链接资源,因为它们支持完全递归的源目录,这与仅包含其顶级的相对路径不同。但是 Gradle 似乎有一个问题,如果包含如下链接的资源被排除在外:
eclipse.project {
linkedResource name: 'core', type: '2', location: new File(project(':core').projectDir, "src/main/webapp").absolutePath
}
eclipse {
wtp {
component {
resource sourcePath: "/core", deployPath: '/'
}
}
}
但是,有一个 withXml 钩子可以用来将正确的 XML 强制转换为 org.eclipse.wst.common.component.xml
eclipse {
wtp {
component {
file {
withXml {
def node = it.asNode().children()[0]
node.appendNode('wb-resource', ["deploy-path": '/', "source-path": '/core'])
}
}
}
}
}