我们刚刚开始使用Gradle并且确实有一些(noob)问题 - 希望有人可以对这些问题有所了解:)
我们正在使用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 war-file中。以下配置: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')
}
在尝试错误和相当多的阅读之后,我得出了这个(可能是错误的)结论:当我调用' gradle build' on:web-grails,然后(我假设):也将在引用的:web-js-html项目上调用build。我这样说是因为jar在build / lib文件夹中重新创建,但显然不使用webjar-task。因此,生成的jar仅包含MANIFEST.MF。
问题2: 在这种情况下我是否正确使用Gradle并且我只是监督一件小事,或者整个方法是否有问题?如何正确地将:web-js-html jar放入战争?
提前感谢您的帮助!
答案 0 :(得分:2)
您定义新工件的部分对我没有任何意义。变化
artifacts {
webjar(webjar.archivePath) {
type 'jar'
builtBy webjar
}
}
到
artifacts {
webjar webjar
}
也许您应该重命名配置或任务。但是第一个webjar
是您的配置,第二个是您创建新jar的任务。
请注意,这将创建一个新工件,因此您必须使用
task webjar(type: Jar, dependsOn: 'jar') {
baseName = 'newJar'
from(fileTree(webjarconfig.staticHTMLFilesDir)) {
into webjarconfig.baseDir + webjarconfig.subDir
}
outputs.file archivePath
}
但我认为你不想创建第二个jar,而是改变原来的jar。在这种情况下,您不必编写新任务,而是配置默认的jar
任务,如下所示:
jar {
from(fileTree(webjarconfig.staticHTMLFilesDir)) {
into webjarconfig.baseDir + webjarconfig.subDir
}
outputs.file archivePath
}