programing tip

Javascript 웹 앱 및 Java 서버, Maven에서 모두 빌드하거나 웹 앱용 Grunt를 사용 하시겠습니까?

itbloger 2020. 8. 24. 07:52
반응형

Javascript 웹 앱 및 Java 서버, Maven에서 모두 빌드하거나 웹 앱용 Grunt를 사용 하시겠습니까?


우리는 AngularJS로 웹 애플리케이션을 만들고 있으며, 의존성 관리를 위해 Bower를 사용하고 테스트를 빌드하고 실행하기 위해 Grunt를 사용하는 아이디어를 좋아합니다. ( Yeoman )

서버는 Maven을 사용하여 Java로 수행되므로 물론 간단한 mvn install빌드 (웹 애플리케이션 + 서버) 만 있으면됩니다.

그렇다면 어떤 접근 방식을 취했으며 그 이유는 무엇입니까?

1) 실제로 두 가지 다른 응용 프로그램으로 취급하십시오. 따라서 다른 건축 방법 / 도구를 사용할 수 있습니다.

2) Grunt Bower는 잊어 버리고, Maven 플러그인을 사용하여 웹 애플리케이션의 빌드, 테스트 실행, 종속성 관리. 그렇다면 어느 것입니까?

3) Maven exec 플러그인을 사용하여 Grunt를 호출하여 프론트 엔드 웹 애플리케이션을 빌드하십시오. 나는 이것을 해결책 이라기보다는 해킹으로 더 많이 본다.

4) 기타.

Jenkins와 통합하기 쉬운 접근 방식은 장점입니다.

미리 감사드립니다!


Java 툴킷의 모든 자산 파이프 라인 도구를 잠시 작업 한 후 몇 가지 결론에 도달했습니다.

자바 기반 도구

몇 가지 도구가 있지만 가장 인기있는 도구는 JAWR 및 Wro4J입니다. 이 두 가지의 가장 큰 문제는 대부분 Rhino 기반이며 (WRO4J는 이제 일부 Node 지원이 있음) Rhino가 Node 기반 도구에 비해 느리다는 것입니다. 또한 JavaScript 도구가 빠르게 성숙하고 있으므로 빠르게 이동할 수있는 도구를 찾아야합니다.

  • WRO4J- 지원이 훌륭하고 Maven과 Eclipse 통합이 훌륭하고 플러그인 목록이 광범위하며 프레임 워크가 유연하여 필요한 모든 것에 플러그인을 작성할 수 있습니다. Java 기반 자산 파이프 라인에 국한된 경우 이것이 확실한 방법입니다. Wro4j의 문제는 노드 기반 도구에 비해 느리다는 것입니다 (노드 프로세스를 시작하더라도).
    LESS가 포함 된 25 개의 에셋 번들을 컴파일하고 연결하는 실제 숫자를 제공하기 위해 CSS CoffeeScript와 JavaScript는 Rhino를 사용할 때 약 35 초, 16G RAM이있는 2013 iMac에서 Wro4j의 노드 지원을 사용하면 약 15 초가 걸립니다. Grunt + Node를 사용하면 내 작은 MacBook Air에서 약 2 초가 걸립니다.

  • JAWR- 통합 및 기능 목록은 꽤 좋지만 문서는 훌륭하지 않으며 자체 플러그인을 작성하는 것이 약간 까다로울 수 있습니다. 내가이 글을 처음 썼을 때 JAWR은 4 년 동안 중단되었지만 현재는 2014 년 1 월 현재 활발한 개발 중입니다. Java 도구를 조사하기로 선택한 경우 조사 할 가치가 있습니다.

노드 기반 도구 (Ant / Maven 빌드와 통합)

  • Grunt- 쉽고, 환상적인 플러그인 생태계가 있으며 커뮤니티는 방대합니다. 만약 당신이해야 할 일이 있다면 그것에 대한 플러그인이있을 것입니다. 아마도 grunt의 제작자가 작성한 플러그인 일 수도 있습니다. Grunt에 대한 주요 비판은 구성 기반이라는 점으로 설정이 매우 쉬워 지지만 "노드 방식"은 아닙니다. Grunt 작업은 쉽게 구성 할 수 없으므로 복잡한 JavaScript 빌드 파이프 라인의 경우 Grunt가 이상적이지 않을 수 있다는 점도 언급 할 가치가 있습니다.

  • Gulp -Gulp는 Grunt의 빠르게 성장하는 대안입니다. 기본적으로 동시 사용되며 빌드 속도를 상당히 높일 수있는 파일 시스템에 대한 임시 쓰기를 방지하기 위해 스트림을 사용합니다. Gulp는 매우 관용적이며 코드> 구성에 중점을두고 있으며 이는 많은 힘을 제공하지만 JavaScript에 대한 핵심 역량이없는 팀에게는 이상적이지 않습니다.

JavaScript 기반 도구에 대한 유일한 잠재적 중단 은 컴파일을 수행해야하는 모든 시스템에 Node , npmgrunt-cli / gulp 가 있어야한다는 것입니다. CI 머신에 대한 액세스 권한이 없거나 아티팩트 기반 배포를 사용하지 않는 경우 이는 어려운 판매 일 수 있습니다.

이것을 Maven 프로젝트에 통합하는 것은 매우 쉽고 몇 가지 옵션이 있습니다. Maven ant-run 플러그인을 사용하고 ant exec 작업을 실행하고 Maven에서 호출하거나 무엇보다도 maven exec 작업을 사용할 수 있습니다 .
아래는 누구에게나 도움이되는 경우 exec 플러그인을 사용하여이를 Maven 라이프 사이클에 통합하는 코드입니다.

    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.2.1</version>
      <executions>
        <execution>
          <phase>prepare-package</phase>
          <goals>
            <goal>exec</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <executable>grunt</executable>
      </configuration>
    </plugin>

For anyone still looking for more information on this topic, one of the creators of Yeoman has a good article (written a few months after this question was originally asked) that expands on the original answer with a bit more detail:


Then there's also the frontend-maven-plugin: https://stackoverflow.com/a/19600777/320399 It downloads Node and NPM for you (locally to your project), downloads Grunt via that NPM (run by that Node) and then runs Grunt (via that Node). It's self-bootstrapping, and you don't need Node installed on the machine to build the project. Just one command; mvn install.


You might want to checkout http://jhipster.github.io/ : it's a Yeoman generator, that generates an application which has Maven, Grunt and Bower all working together.

It's a bit like your third option, but everything is configured for you, which isn't that easy. It's also generating the basic AngularJS and Java REST services for you.


after few hours spent over this problem, i can say this:

maven and grunt do not play well, but it can be enforced..

Here is a plugin description for running Grunt via Maven build

i hope this helps :)

참고URL : https://stackoverflow.com/questions/15406977/javascript-web-app-and-java-server-build-all-in-maven-or-use-grunt-for-web-app

반응형