복붙노트

[SPRING] Gradle을 사용하여 프로젝트에 AngularJs를 포함 할 수 있습니까?

SPRING

Gradle을 사용하여 프로젝트에 AngularJs를 포함 할 수 있습니까?

예를 들어 AngularJs를 Maven에 Spring 프로젝트에 포함시키는 것이 가능하다는 것을 알고 있지만 Gradle에는 어떻게 포함시킬 수 있을까요?

gradle 저장소를 살펴보면 AngularJs 항목을 찾을 수 없습니다. Gradle을 사용하여 Maven 저장소에서 가져올 수 있습니까? 그러나 어떻게 그렇게 할 수 있을까요?

해결법

  1. ==============================

    1.아래의 토론에서 그라데이션을 통해 각도를 다운로드하는 것이 이치에 맞지 않는다는 결론을 얻었지만 다음 코드를 사용하여 수행 할 수 있습니다.

    아래의 토론에서 그라데이션을 통해 각도를 다운로드하는 것이 이치에 맞지 않는다는 결론을 얻었지만 다음 코드를 사용하여 수행 할 수 있습니다.

    repositories {
       ivy {
          name = 'AngularJS'
          url = 'https://code.angularjs.org/'
          layout 'pattern', {
             artifact '[revision]/[module](.[classifier]).[ext]'
          }
       }
    }
    
    configurations {
       angular
    }
    
    dependencies {
       angular group: 'angular', name: 'angular', version: '1.3.9', classifier: 'min', ext: 'js'
    }
    
    task fetch(type: Copy) {
       from configurations.angular
       into 'src/main/webapp/js'
       rename {
          'angular.js'
       }
    }
    
  2. ==============================

    2.나는 AngularJS 2 + Spring Boot 응용 프로그램을 Gradle과 함께 사용합니다. typescript (.ts 파일)와 npm (노드 js 패키지 관리자)을 사용합니다. 그래서 npm은 node_modules 생성을 위해 설치하고 npm은 타이 스크립트를 자바 스크립트로 변환하기 위해 tsc를 실행합니다. 나는 여전히 웹 jars를 사용하고 있지만 기본적으로 의존성은 빌드하는 동안 npm 태스크에 의해 수집되고 systemjs.config.js 파일에 의해 유선 화된다.

    나는 AngularJS 2 + Spring Boot 응용 프로그램을 Gradle과 함께 사용합니다. typescript (.ts 파일)와 npm (노드 js 패키지 관리자)을 사용합니다. 그래서 npm은 node_modules 생성을 위해 설치하고 npm은 타이 스크립트를 자바 스크립트로 변환하기 위해 tsc를 실행합니다. 나는 여전히 웹 jars를 사용하고 있지만 기본적으로 의존성은 빌드하는 동안 npm 태스크에 의해 수집되고 systemjs.config.js 파일에 의해 유선 화된다.

    아래는 내 폴더 구조입니다.

    /src/main/java
    /src/main/resources
                       /app           - .ts files and .js translated from .ts
                       /css
                       /js            - systemjs.config.js
                       /node_modules  - generated by npm install
                       /typings       - generated by npm install
                       package.json
                       tsconfig.json
                       typings.json
    /src/main/webapp/WEB-INF/jsp      - .jsp files
    

    이것은 내 build.gradle 파일이며 npm 태스크를 실행하기 위해 두 개의 사용자 정의 태스크 (npmInstall 및 npmRunTsc)를 추가합니다.

    build.gradle

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.5.RELEASE")
            classpath("org.flywaydb:flyway-gradle-plugin:3.2.1")
        }
    }
    
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'spring-boot'
    apply plugin: 'war'
    
    war {
        baseName = 'my-angular-app'
        version =  '1.0'
        manifest {
            attributes 'Main-Class': 'com.my.Application'
        }
    }
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    repositories {
        mavenLocal()
        mavenCentral()
    }
    
    task npmInstall(type:Exec) {
        workingDir 'src/main/resources'
        commandLine 'npm', 'install'
        standardOutput = new ByteArrayOutputStream()
        ext.output = {
            return standardOutput.toString()
        }
    }
    
    task npmRunTsc(type:Exec) {
        workingDir 'src/main/resources'
        commandLine 'npm', 'run', 'tsc'
        standardOutput = new ByteArrayOutputStream()
        ext.output = {
            return standardOutput.toString()
        }
    }
    
    dependencies {
        // tag::jetty[]
        compile("org.springframework.boot:spring-boot-starter-web")
        compile("org.springframework.boot:spring-boot-starter-tomcat",
                "org.springframework.boot:spring-boot-starter-data-jpa",
                "org.springframework.boot:spring-boot-starter-actuator",
                "org.springframework.boot:spring-boot-starter-security",
                "org.springframework.boot:spring-boot-starter-batch",
                "org.springframework.cloud:spring-cloud-starter-config:1.0.3.RELEASE",
                "org.springframework.cloud:spring-cloud-config-client:1.0.3.RELEASE",
                "com.google.code.gson:gson",
                "commons-lang:commons-lang:2.6",
                "commons-collections:commons-collections",
                "commons-codec:commons-codec:1.10",
                "commons-io:commons-io:2.4",
                "com.h2database:h2",
                "org.hibernate:hibernate-core",
                "org.hibernate:hibernate-entitymanager",
                "org.webjars:datatables:1.10.5",
                "org.webjars:datatables-plugins:ca6ec50",
                "javax.servlet:jstl",
                "org.apache.tomcat.embed:tomcat-embed-jasper",
                "org.quartz-scheduler:quartz:2.2.1",
                "org.jolokia:jolokia-core",
                "org.aspectj:aspectjweaver",
                "org.perf4j:perf4j:0.9.16",
                "commons-jexl:commons-jexl:1.1",
                "cglib:cglib:3.2.1",
                "org.flywaydb:flyway-core",
                )
        providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
        testCompile("junit:junit",
                    "org.springframework:spring-test",
                    "org.springframework.boot:spring-boot-starter-test",
                    "org.powermock:powermock-api-mockito:1.6.2",
                    "org.powermock:powermock-module-junit4:1.6.2",
                    )
    }
    
    task wrapper(type: Wrapper) {
        gradleVersion = '1.11'
    }
    

    gradble 빌드 프로세스를 실행할 때 아래와 같이 실행됩니다.

    $ gradle clean npmInstall npmRunTsc test bootRepackage
    

    AngularJS 튜토리얼에 나와있는 동일한 systemjs.config.js를 사용할 수 있습니다.

    systemjs.config.js

    (function(global) {
      // map tells the System loader where to look for things
      var map = {
        'app':                        'app', // 'dist',
        'rxjs':                       'node_modules/rxjs',
        'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
        '@angular':                   'node_modules/@angular'
      };
      // packages tells the System loader how to load when no filename and/or no extension
      var packages = {
        'app':                        { main: 'main.js',  defaultExtension: 'js' },
        'rxjs':                       { defaultExtension: 'js' },
        'angular2-in-memory-web-api': { defaultExtension: 'js' },
      };
      var packageNames = [
        '@angular/common',
        '@angular/compiler',
        '@angular/core',
        '@angular/http',
        '@angular/platform-browser',
        '@angular/platform-browser-dynamic',
        '@angular/router',
        '@angular/router-deprecated',
        '@angular/testing',
        '@angular/upgrade',
      ];
      // add package entries for angular packages in the form '@angular/common': { main: 'index.js', defaultExtension: 'js' }
      packageNames.forEach(function(pkgName) {
        packages[pkgName] = { main: 'index.js', defaultExtension: 'js' };
      });
      var config = {
        map: map,
        packages: packages
      }
      System.config(config);
    })(this);
    

    그리고 .jsp 파일에서 headjs에 systemjs.config.js를 포함합니다.

    <script type="text/javascript" src="node_modules/zone.js/dist/zone.js"></script>
    <script type="text/javascript" src="node_modules/reflect-metadata/Reflect.js"></script>
    <script type="text/javascript" src="node_modules/systemjs/dist/system.src.js"></script>
    <script type="text/javascript" src="js/systemjs.config.js"></script>
    

    마지막으로 컨텍스트 경로를 정렬하려면 Spring WebMvcConfigurerAdapter에서 아래와 같이한다.

    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages = "com.my.controller")
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!registry.hasMappingForPattern("/webjars/**")) {
                registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
            }
            if (!registry.hasMappingForPattern("/images/**")) {
                registry.addResourceHandler("/images/**").addResourceLocations("classpath:/images/");
            }
            if (!registry.hasMappingForPattern("/css/**")) {
                registry.addResourceHandler("/css/**").addResourceLocations("classpath:/css/");
            }
            if (!registry.hasMappingForPattern("/js/**")) {
                registry.addResourceHandler("/js/**").addResourceLocations("classpath:/js/");
            }
            if (!registry.hasMappingForPattern("/app/**")) {
                registry.addResourceHandler("/app/**").addResourceLocations("classpath:/app/");
            }
            if (!registry.hasMappingForPattern("/node_modules/**")) {
                registry.addResourceHandler("/node_modules/**").addResourceLocations("classpath:/node_modules/");
            }
        }
    
        @Bean
        public InternalResourceViewResolver internalViewResolver() {
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            viewResolver.setPrefix("/WEB-INF/jsp/");
            viewResolver.setSuffix(".jsp");
            viewResolver.setOrder(1);
            return viewResolver;
        }
    }
    
  3. ==============================

    3.체크 아웃 webjars, 나는 그것을 매우 좋습니다.

    체크 아웃 webjars, 나는 그것을 매우 좋습니다.

    방금 Maven 및 Gradle 프로젝트에서 사용했습니다. 기본적으로 그것은 우리가 필요로하는 것, 단지에 패키징 된 프론트 엔드 프로젝트 및 프레임 워크의 방대한 컬렉션입니다.

  4. ==============================

    4.늦어 질 수도 있지만 https://github.com/gharia/spring-boot-angular를 확인하십시오. 이것은 자산 파이프 라인을 사용하는 앵귤러 JS가있는 Spring Boot 프로젝트입니다.

    늦어 질 수도 있지만 https://github.com/gharia/spring-boot-angular를 확인하십시오. 이것은 자산 파이프 라인을 사용하는 앵귤러 JS가있는 Spring Boot 프로젝트입니다.

    편집하다:

    이 gradle 플러그인을 사용하여 npm이나 bower 또는 GIT의 클라이언트 측 종속성을 쉽게 관리 할 수 ​​있습니다. 아래 build.gradle 샘플을 참조하십시오. 여기서 clientDependencies에 Angular의 여러 의존성을 포함 시켰습니다.

    buildscript {
        repositories {
            mavenCentral()
            mavenLocal()
            maven { url "https://repo.grails.org/grails/core" }
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE")
            classpath("org.codehaus.groovy:groovy:2.4.6")
            classpath("gradle.plugin.com.boxfuse.client:flyway-release:4.0")
        }
    }
    
    plugins {
        id 'com.craigburke.client-dependencies' version '1.0.0-RC2'
    }
    
    apply plugin: 'groovy'
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'spring-boot'
    apply plugin: 'war'
    
    jar {
        baseName = 'boot-demo'
        version =  '0.1.0'
    }
    
    repositories {
        mavenCentral()
        mavenLocal()
        maven { url "https://repo.grails.org/grails/core" }
        jcenter()
        maven { url "http://repo.spring.io/libs-snapshot" }
    }
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    configurations {
        providedRuntime
    }
    
    dependencies {
        compile("org.springframework.boot:spring-boot-starter-web")
        providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
        compile("org.springframework.boot:spring-boot-starter-actuator")
        compile("org.springframework.boot:spring-boot-starter-data-jpa")
    
        compile("org.codehaus.groovy:groovy")
        testCompile("org.springframework.boot:spring-boot-starter-test")
        testCompile("junit:junit")
    }
    
    task wrapper(type: Wrapper) {
        gradleVersion = '2.3'
    }
    
    clientDependencies {
    
    
        npm {
            'angular'('1.5.x', into: 'angular') {
                include 'angular.js'
                include 'angular.min.js'
            }
            'angular-resource'('1.5.x', into: 'angular') {
                include 'angular-resource.js'
                include 'angular-resource.min.js'
            }
            'angular-mocks'('1.5.x', into: 'angular') {
                include 'angular-mocks.js'
                include 'angular-mocks.min.js'
            }
            'angular-route'('1.5.x', into: 'angular'){
                include 'angular-route.js'
                include 'angular-route.min.js'
            }
            'angular-animate'('1.5.x', into: 'angular') {
                include 'angular-animate.js'
                include 'angular-animate.min.js'
            }               
    
        }
    
    }
    
    assets {
      minifyJs = true
      minifyCss = true
    }
    

    각도가있는 봄 부팅 프로젝트의 아키텍처에 대한 자세한 내용은 다음 블로그를 참조하십시오.

    https://ghariaonline.wordpress.com/2016/04/19/spring-boot-with-angular-using-gradle/

  5. from https://stackoverflow.com/questions/28754898/is-it-possible-to-include-angularjs-to-a-project-with-gradle by cc-by-sa and MIT license