【问题标题】:Gradle project / task dependency & JavaScript lib in war战争中的 Gradle 项目/任务依赖和 JavaScript 库
【发布时间】: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


    【解决方案1】:

    您定义新工件的部分对我来说没有任何意义。改变

    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 {
        from(fileTree(webjarconfig.staticHTMLFilesDir)) {
            into webjarconfig.baseDir + webjarconfig.subDir
        }
        outputs.file archivePath
    }
    

    【讨论】:

    • 太好了,谢谢你,工作就像一个魅力。我不知道 jar{} 构造,使事情更加简洁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多