Grails资产在部署的.WAR中不起作用

时间:2017-03-13 03:49:02

标签: grails intellij-idea

我正在通过Intellij Idea 2016.3运行应用程序,一切正常,当我生成.WAR(gradlew汇编)文件时,资产未在正在运行的应用程序中加载,应用程序无法正常工作。

Grails 3.1.14 JDK 1.8.121

这是我的 build.gradle

    buildscript {
    ext {
        grailsVersion = project.grailsVersion
    }
    repositories {
        mavenLocal()
        maven { url "https://repo.grails.org/grails/core" }
    }
    dependencies {
        classpath "org.grails:grails-gradle-plugin:$grailsVersion"
        classpath "gradle.plugin.com.craigburke.gradle:bower-installer-gradle:2.5.1"
        classpath "org.grails.plugins:hibernate4:5.0.5"
        classpath "com.bertramlabs.plugins:asset-pipeline-gradle:2.8.2"
        classpath "org.grails.plugins:views-gradle:1.0.12"
    }
}

    version "1.0.18"
    group "veedy"

    apply plugin:"eclipse"
    apply plugin:"idea"
    apply plugin:"war"
    apply plugin:"org.grails.grails-web"
    apply plugin:"org.grails.grails-gsp"
    apply plugin:"com.craigburke.bower-installer"
    apply plugin:"asset-pipeline"
    apply plugin:"org.grails.plugins.views-json"
    apply plugin: 'spring-boot'


    springBoot {
        executable = true
    }

    ext {
        grailsVersion = project.grailsVersion
        gradleWrapperVersion = project.gradleWrapperVersion
    }

    repositories {
        mavenLocal()
        maven { url "https://repo.grails.org/grails/core" }
    }

    dependencyManagement {
        imports {
            mavenBom "org.grails:grails-bom:$grailsVersion"
        }
        applyMavenExclusions false
    }

    dependencies {
        assets "com.craigburke.angular:angular-template-asset-pipeline:2.2.6"
        assets "com.craigburke.angular:angular-annotate-asset-pipeline:2.4.0"
        assets "com.craigburke:js-closure-wrap-asset-pipeline:1.2.0"
        compile "org.springframework.boot:spring-boot-starter-logging"
        compile "org.springframework.boot:spring-boot-autoconfigure"
        compile "org.grails:grails-core"
        compile "org.springframework.boot:spring-boot-starter-actuator"
        compile "org.springframework.boot:spring-boot-starter-tomcat"
        compile "org.grails:grails-plugin-url-mappings"
        compile "org.grails:grails-plugin-rest"
        compile "org.grails:grails-plugin-codecs"
        compile "org.grails:grails-plugin-interceptors"
        compile "org.grails:grails-plugin-services"
        compile "org.grails:grails-plugin-datasource"
        compile "org.grails:grails-plugin-databinding"
        compile "org.grails:grails-plugin-async"
        compile "org.grails:grails-web-boot"
        compile "org.grails:grails-logging"
        compile "org.grails.plugins:cache"
        compile "org.grails:grails-plugin-gsp"
        compile "org.grails.plugins:hibernate4"
        compile "org.hibernate:hibernate-ehcache"
        compile "org.grails.plugins:views-json:1.0.12"
        console "org.grails:grails-console"
        profile "org.grails.profiles:angular:3.1.6"
        runtime "com.h2database:h2"
        runtime "com.bertramlabs.plugins:asset-pipeline-grails:2.8.2"
        testCompile "org.grails:grails-plugin-testing"
        testCompile "org.grails.plugins:geb"
        testCompile "org.grails:grails-datastore-rest-client"
        testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1"
        testRuntime "net.sourceforge.htmlunit:htmlunit:2.18"


        //custom
        compile 'org.grails.plugins:spring-security-core:3.0.3'
        compile "org.grails.plugins:mail:2.0.0.RC4"
        compile "org.grails.plugins:grails-spring-websocket:2.3.0"
        runtime 'mysql:mysql-connector-java:5.1.36'
    }

    task wrapper(type: Wrapper) {
        gradleVersion = gradleWrapperVersion
    }
    bower {
        'angular'('1.4.x') {
            source 'angular.js'
        }
        'angular-resource'('1.4.x') {
            source 'angular-resource.js' >> '/angular/'
        }
        'angular-mocks'('1.4.x') {
            source 'angular-mocks.js' >> '/angular/'
        }
        'angular-bootstrap'('1.1.x') {
            source 'ui-bootstrap-tpls.js' >> '/angular/'
        }
        'bootstrap'('3.x.x') {
            source 'dist/css/bootstrap.css' >> '/bootstrap/'
        }
    }

    assets {
        minifyJs = true
        minifyCss = true
    }


    bootRun {
        // local.config.location is just a random name. You can use yours.
        jvmArgs = ['-Dlocal.config.location=app-config.yml']
    }

和我的

2 个答案:

答案 0 :(得分:0)

在我的结尾,无论有没有war,它都可以在build.gradle下面的代码段中正常工作。

基本上,需要提到资产管道的gradle插件。此外,在dependencies中将其更改为compile而不是runtime

buildscript {
    ext {
       ...
    }
    repositories {
        ...
    }
    dependencies {
        ...
        classpath "com.bertramlabs.plugins:asset-pipeline-gradle:2.10.2"
        ...
    }
}
apply plugin:"asset-pipeline"

<强>更新

在我的Grails应用程序中,我有以下代码:

... \ grails-app \ assets \ javascripts \ app \ app.js

//= require_self
//= require /angular/angular.js
//= require /angular/lodash.js
//= require /angular/ui-bootstrap-tpls-2.3.1.js
//= require /app/directives/directives.js

'use strict';

var app = angular
  .module('myapp', [
    'ui.bootstrap', 'directives'
  ]);

... \ grails-app \ assets \ javascripts \ app \ directives \ directives.js

//= require_self

angular.module("directives",[])
  .directive('bindUnsafeHtml',['$compile', function($compile) {...}]);

index.gsp中

 <asset:javascript src="app/app.js" />

请注意:行//= require_self之类的注释对于模块依赖性很重要。

Gradle Angular Asset Pipeline在示例中提到了这一点。

答案 1 :(得分:0)

问题解决了,在gradle.build中删除了Bower调用。