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


97

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

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

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

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

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

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

4) 기타.

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

미리 감사드립니다!


2
3 년 후 도구 통합이 분명히 개선되었습니다. 이 받는다는 플러그인은 대부분의 일들이 덮여있는 것을 보인다 github.com/eirslett/frontend-maven-plugin
earcam

답변:


73

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>

1
자세한 답변에 감사드립니다. Node Based Tooling 옵션을 선택하겠습니다. 그런트를 처음 접한 나는 지금까지 본 것을 좋아하고 두 가지 세계의 장점을 가질 수 있다면 좋을 것입니다. WRO4J와 JAWR의 존재에 대해 몰랐습니다. 다시 한 번 감사드립니다.
void

wro4j는 성능이 node.js 기본 성능과 비슷한 less.js의 Java 기반 구현 인 less4j 프로세서를 통합합니다.
Alex Objelean 2013

1
wro4j가 node.js에서 그렇게 빠르지 않은 이유는 대부분 각 실행에 대해 디스크 IO 작업이 필요하기 때문입니다. 이는 node.js 기반 프로세스 (예 : lessc)가 리소스의 메모리 내 컴파일을 허용하는 경우에만 개선 될 수 있습니다.
Alex Objelean 2013

12
이 프로세스 Mavengrunt빌드가 실패 할 경우 빌드 실패를 지원합니까?
Snekse

6
제대로 반환되지 않는 exec 작업은 빌드에 실패해야합니다. stackoverflow.com/questions/3480162/…
Baer

24

이 주제에 대해 더 많은 정보를 찾고있는 사람을 위해 Yeoman의 제작자 중 한 명이 원래 답변을 좀 더 자세히 설명하는 좋은 기사 (이 질문이 처음 질문 된 후 몇 달 후에 작성 됨)를 가지고 있습니다.


두 배 감사합니다! 이 게시물은 매우 도움이되었다 발견하고 더 내가 찾고 있던 무슨
라이언 J. 맥도

13

그런 다음 frontend-maven-plugin도 있습니다. https://stackoverflow.com/a/19600777/320399 Node 및 NPM을 귀하의 프로젝트에 로컬로 다운로드하고 해당 NPM (해당 노드에서 실행)을 통해 Grunt를 다운로드 한 다음 Grunt를 실행합니다 (해당 노드를 통해). 자체 부트 스트랩이며 프로젝트를 빌드하기 위해 머신에 노드를 설치할 필요가 없습니다. 단 하나의 명령; mvn 설치.


13

http://jhipster.github.io/ 를 확인하고 싶을 수도 있습니다 . Maven, Grunt 및 Bower가 모두 함께 작동하는 응용 프로그램을 생성하는 Yeoman 생성기입니다.

세 번째 옵션과 약간 비슷하지만 모든 것이 사용자를 위해 구성되어 있지만 쉽지는 않습니다. 또한 기본 AngularJS 및 Java REST 서비스를 생성합니다.


1
내 프로젝트가 새로 생성 된 애플리케이션으로 시작하기에는 너무 늦었습니다. 그러나 이것은 위대하고 매우 도움이됩니다. 생성 된 응용 프로그램의 솔루션 중 일부를 빌려서 프로젝트에 사용할 것입니다. 감사!
Matsemann

2
실제로 yeoman-maven-plugin 만 포함하면되며 모든 JavaScript 구성 항목 (bower, npm, grunt)을 pom.xml (정확히 이러한 파일이 IMO에 속해야하는 위치)에 형제로 넣을 수 있습니다. mvn install은 src / main / webapp 아래의 webapp을 포함하여 모든 것을 빌드합니다. 기존 프로젝트를 해당 구조로 이식하는 데 30 분도 채 걸리지 않았습니다. 물론 github.com/jhipster/jhipster-sample-app
raven_arkadon 2014

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.