使用Gradle

时间:2015-09-15 09:03:46

标签: eclipse gradle eclipse-wtp

我正在尝试模块化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 / contents

child/
  css/
    default.css
  js/
    core.js
    project.js
    subfolder/   <== missing another-core.js
  WEB-INF/
  project.html

有没有办法让eclipse在没有单独列出所有文件夹的情况下这样做?

外部wb资源的另一个限制是当它们重叠时,例如包括“js /子文件夹”“js /”Eclipse自动删除“js /子文件夹”

1 个答案:

答案 0 :(得分:3)

我认为这是可能的唯一方法是通过使用链接资源,因为它们支持完全递归的源目录,而不像仅包含其顶级的相对路径。但是Gradle似乎存在一个问题,即如果包含以下链接资源,则将其排除在外:

    ...
    "Total gain" : '#22cfcf'
}
...

但是,有一个withXml钩子可用于将正确的XML强制转换为org.eclipse.wst.common.component.xml

eclipse.project {    
    linkedResource name: 'core', type: '2', location: new File(project(':core').projectDir, "src/main/webapp").absolutePath
}
eclipse {
    wtp {
        component {
            resource sourcePath: "/core", deployPath: '/'
        }
    }
}