我们才刚刚开始使用Gradle,并且确实有一些(新手)问题-希望有人可以对这些问题有所启发:)

我们正在使用Angular和Grails构建我们的网络应用。我们希望尽可能地模块化,因此将所有与Angular相关的 Artifact (主要是* .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任务。但这不是,所以很明显我遗漏了一些东西。它是否遵循仅在显式调用(从命令行或在build.gradle文件中)调用webjar的情况下执行?

现在,我们希望将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 ?

提前谢谢你的帮助!

最佳答案

您定义新 Artifact 的部分对我来说没有任何意义。更改

artifacts {
    webjar(webjar.archivePath) {
        type 'jar'
        builtBy webjar
    }
}


artifacts {
    webjar webjar
}

也许您应该重命名您的配置或任务。但是,第一个webjar是您的配置,第二个是创建新jar的任务。
请注意,这将创建一个新的 Artifact ,因此您必须使用一个不同的名称
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 - war 中的Gradle项目/任务依赖和JavaScript库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25288826/

10-12 00:23
查看更多