[maven] 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>


답변

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


답변

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


답변

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

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


답변

이 문제에 대해 몇 시간을 보낸 후 다음과 같이 말할 수 있습니다.

maven과 grunt는 잘 작동하지 않지만 강제 할 수 있습니다 ..

다음은 Maven 빌드를 통해 Grunt를 실행하기위한 플러그인 설명입니다.

이게 도움이 되길 바란다 🙂


답변