我们刚刚开始使用 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 war 文件中。 :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 放入 war 中?
提前感谢您的帮助!
最佳答案
您定义新工件的部分对我来说没有任何意义。改变
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
}
关于grails - Gradle 项目/任务依赖和 JavaScript 库在 war 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25288826/