【发布时间】:2014-08-13 14:26:44
【问题描述】:
我们刚刚开始使用 Gradle,确实有一些(菜鸟)问题 - 希望有人能对这些问题有所了解:)
我们正在使用 Angular 和 Grails 来构建我们的网络应用程序。我们希望尽可能模块化,因此将所有与 Angular 相关的工件(主要是 *.js 和 *.html 文件)放在 Gradle 多项目构建中的单独项目中。
我们的项目结构如下:
- root
-- build.gradle
-- settings.gradle
|-- web-grails (grails project)
|----- build.gradle
|-- web-js-html (angular / js / html sources)
|----- build.gradle
首先,我们只是想相应地打包 web-js-html 项目。到目前为止,我们提出的(非常欢迎其他建议)是对其应用 webjars 结构,即在 /META-INF/resources 下有一个包含所需资源的 .jar 文件。在网上,我们发现以下配置似乎可以正常工作:
// file :web-js-grails/build.gradle
apply plugin: 'java'
ext {
webjarconfig = [
staticHTMLFilesDir : "${projectDir}/src/main/webfrontend",
baseDir: "META-INF/resources/",
subDir : "webjars/" + deployed_app_name
]
}
configurations {
webjar
}
task webjar(type: Jar, dependsOn: 'jar') {
from(fileTree(webjarconfig.staticHTMLFilesDir)) {
into webjarconfig.baseDir + webjarconfig.subDir
}
outputs.file archivePath
}
artifacts {
webjar(webjar.archivePath) {
type 'jar'
builtBy webjar
}
}
通过调用“gradle webjar”,jar 会在正确位置创建文件。
问题 1: 我所期望的是,如果我调用“gradle build”,这个 jar 也会被正确创建。据我了解,“gradle build”是由 java 插件定义的任务,在某些时候,它会调用“jar”任务。完成该“jar”任务后,我希望调用 webjar 任务。但事实并非如此,所以很明显我错过了一些东西。它是否遵循 webjar 仅在显式调用(从命令行或从 build.gradle 文件中)时才被执行?
现在,我们希望将 webjar 包含在 web-grails 战争文件中。 :web-grails/build.gradle 的配置如下:
apply plugin: "grails"
repositories {
mavenLocal()
maven { url artifactory_url }
}
buildscript {
repositories {
mavenLocal()
maven { url artifactory_url }
}
dependencies {
classpath 'org.grails:grails-gradle-plugin:2.0.1-SNB1'
}
}
grails {
grailsVersion = '2.3.8'
groovyVersion = '2.3.0'
}
dependencies {
bootstrap 'org.grails.plugins:tomcat:7.0.50'
compile project(':web-js-html')
}
在试错和大量阅读之后,我得出了这个(可能是错误的)结论:当我在 :web-grails 上调用“gradle build”时,(我假设):build 也将被调用在引用的 :web-js-html 项目上。我这样说是因为 jar 在 build/lib 文件夹中重新创建,但显然没有使用 webjar-task。因此,生成的 jar 仅包含 MANIFEST.MF。
问题 2: 在这种情况下,我是否正确使用 Gradle,我只是监督了一小件事,还是整个方法有问题?如何正确地将 :web-js-html jar 放入战争中?
提前感谢您的帮助!
【问题讨论】:
标签: grails gradle dependencies