Javascript web app และ Java server สร้างทั้งหมดใน Maven หรือใช้ Grunt สำหรับ web app?


97

เรากำลังทำเว็บแอปพลิเคชันด้วย AngularJS และเราชอบแนวคิดในการใช้ Bower สำหรับการจัดการการพึ่งพาและ Grunt สำหรับการสร้างการทดสอบการทำงานและอื่น ๆ ( Yeoman )

เซิร์ฟเวอร์ทำงานด้วย Java โดยใช้ Maven ดังนั้นแน่นอนว่าเราต้องการmvn installสร้างทุกอย่างง่ายๆ(เว็บแอปพลิเคชัน + เซิร์ฟเวอร์)

คุณใช้แนวทางใดและทำไม?

1) ถือว่าเป็นสองแอปพลิเคชันที่แตกต่างกันซึ่งในความเป็นจริงแล้ว ดังนั้นการใช้วิธีการสร้าง / เครื่องมือที่แตกต่างกันจึงเป็นที่ยอมรับได้

2) ลืมเรื่อง Grunt Bower ใช้ปลั๊กอิน Maven เพื่อสร้างเรียกใช้การทดสอบจัดการการอ้างอิงสำหรับเว็บแอปพลิเคชัน ถ้าเป็นอย่างนั้นคนไหน?

3) ใช้ปลั๊กอิน Maven exec เพื่อเรียก Grunt เพื่อสร้างเว็บแอปส่วนหน้า ฉันเห็นว่านี่เป็นการแฮ็กมากกว่าวิธีแก้ปัญหา

4) อื่น ๆ

วิธีที่ง่ายกว่าในการผสานรวมกับเจนกินส์เป็นข้อดี

ขอบคุณล่วงหน้า!


2
3 ปีต่อมาการรวมเครื่องมือได้รับการปรับปรุงอย่างเห็นได้ชัด ดูเหมือนว่าปลั๊กอิน maven นี้จะครอบคลุมสิ่งต่างๆมากที่สุด: github.com/eirslett/frontend-maven-plugin
earcam

คำตอบ:


73

หลังจากทำงานกับเครื่องมือไปป์ไลน์สินทรัพย์ทุกรายการในชุดเครื่องมือ Java มาระยะหนึ่งฉันก็ได้ข้อสรุปบางประการ:

เครื่องมือบน Java

มีเครื่องมือจำนวนหนึ่งออกมา แต่ที่นิยมมากที่สุดคือ JAWR และ Wro4J ปัญหาที่ใหญ่ที่สุดของทั้งสองอย่างนี้คือส่วนใหญ่เป็นRhino (ขณะนี้ WRO4J มีการรองรับ Node บางส่วน) และ Rhino ช้าเมื่อเทียบกับเครื่องมือที่ใช้โหนด คุณต้องพิจารณาด้วยว่าเครื่องมือ JavaScript กำลังเติบโตอย่างรวดเร็วดังนั้นคุณควรมองหาเครื่องมือที่สามารถเคลื่อนที่ได้อย่างรวดเร็ว

  • WRO4J - การสนับสนุนนั้นยอดเยี่ยมการรวม Maven และ Eclipse นั้นยอดเยี่ยมรายการปลั๊กอินนั้นกว้างขวางและเฟรมเวิร์กมีความยืดหยุ่นพอที่จะใช้จาระบีข้อศอกบางส่วนคุณสามารถเขียนปลั๊กอินสำหรับสิ่งที่คุณต้องการได้ หากคุณถูก จำกัด อยู่ในไปป์ไลน์สินทรัพย์ที่ใช้ Java นี่เป็นหนทางที่จะไปได้อย่างแน่นอน ปัญหาของ Wro4j คือมันช้า (แม้ว่าจะเริ่มต้นกระบวนการ Node) เมื่อเทียบกับเครื่องมือที่ใช้โหนด
    ในการให้ตัวเลขในโลกแห่งความเป็นจริงที่รวบรวมและเชื่อมต่อชุดเนื้อหา 25 ชุดที่มี LESS, CSS CoffeeScript และ JavaScript จะใช้เวลาประมาณ 35 วินาทีเมื่อใช้ Rhino และ ~ 15 วินาทีโดยใช้การสนับสนุน Node ของ Wro4j บน iMac 2013 ที่มี RAM 16G การใช้Grunt + Node ใช้เวลาประมาณ 2 วินาทีใน MacBook Air ที่มีปัญหาของฉัน

  • JAWR - การผสานรวมและรายการคุณสมบัติค่อนข้างดี แต่เอกสารไม่ค่อยดีนักและการเขียนปลั๊กอินของคุณเองอาจเป็นเรื่องยุ่งยากเล็กน้อย ตอนแรกที่ฉันเขียนโพสต์นี้ JAWR อยู่ในช่วงกลางของการเว้นช่วง 4 ปี แต่ตอนนี้กลับมาอยู่ระหว่างการพัฒนาในช่วงเดือนมกราคม 2014 หากคุณเลือกที่จะตรวจสอบ Java Tools สิ่งนี้ควรค่าแก่การตรวจสอบ

เครื่องมือที่ใช้โหนด (รวมกับ Ant / Maven Builds)

  • Grunt - เป็นเรื่องง่ายมีระบบนิเวศปลั๊กอินที่ยอดเยี่ยมและชุมชนมีขนาดใหญ่ หากมีบางสิ่งที่คุณต้องทำคุณสามารถเดิมพันได้ว่ามีปลั๊กอินสำหรับมัน - อาจเป็นหนึ่งเดียวที่เขียนโดยผู้สร้างความฮึดฮัด คำวิพากษ์วิจารณ์ที่สำคัญของ Grunt คือมันเป็นตัวขับเคลื่อนการกำหนดค่าซึ่งทำให้การตั้งค่าทำได้ง่ายมาก แต่ไม่ใช่ "Node Way" นอกจากนี้ยังควรค่าแก่การกล่าวถึงว่างาน Grunt นั้นไม่สามารถประกอบได้อย่างง่ายดายดังนั้น Grunt สำหรับการสร้าง JavaScript ที่ซับซ้อนอาจไม่เหมาะ

  • Gulp - อึกเป็นทางเลือกที่เติบโตอย่างรวดเร็วสำหรับ Grunt พร้อมกันตามค่าเริ่มต้นและใช้สตรีมเพื่อหลีกเลี่ยงการเขียนชั่วคราวไปยังระบบไฟล์ซึ่งสามารถเร่งความเร็วบิลด์ของคุณได้มาก Gulp เป็นสำนวนที่ดีมากและให้ความสำคัญกับการกำหนดค่าโค้ด> และแม้ว่าสิ่งนี้จะให้พลังแก่คุณมากมาย แต่ก็ไม่เหมาะสำหรับทีมที่ไม่มีความสามารถหลักใน JavaScript

สิ่งเดียวที่เป็นไปได้ในการวางสายสำหรับเครื่องมือที่ใช้ JavaScript คือคุณจะต้องมีNode , npmและgrunt-cli / gulpบนเครื่องใด ๆ ที่ต้องทำการคอมไพล์ หากคุณไม่สามารถเข้าถึงเครื่อง CI ของคุณหรือไม่ได้ใช้อุปกรณ์ที่ใช้ Artifact ก็อาจเป็นการขายยาก

การรวมสิ่งนี้เข้ากับโครงการ Maven ของคุณนั้นค่อนข้างง่ายและคุณมีตัวเลือกค่อนข้างน้อย คุณสามารถใช้ปลั๊กอิน Maven ant-runคุณสามารถรันงานant execและเรียกใช้จาก Maven หรือที่ดีที่สุดคือคุณสามารถใช้งานmaven execได้
ด้านล่างนี้เป็นรหัสเพื่อรวมสิ่งนี้เข้ากับวงจรชีวิตของ Maven โดยใช้ปลั๊กอิน exec หากสิ่งนี้มีประโยชน์กับทุกคน

    <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 ใหม่สำหรับ Grunt ฉันชอบสิ่งที่ฉันได้เห็นจนถึงตอนนี้และจะดีมากถ้าฉันสามารถมีโลกที่ดีที่สุดสองโลกได้ ฉันไม่รู้เกี่ยวกับการมีอยู่ของ WRO4J และ JAWR ขอบคุณอีกครั้ง.
โมฆะ

wro4j รวมโปรเซสเซอร์ less4j ซึ่งเป็นการใช้งาน java โดยใช้ less.js ซึ่งมีประสิทธิภาพเทียบเท่ากับ node.js เนทีฟ
Alex Objelean

1
สาเหตุที่ wro4j ไม่เร็วขนาดนั้นกับ node.js ส่วนใหญ่เป็นเพราะต้องใช้การดำเนินการดิสก์ IO สำหรับการดำเนินการแต่ละครั้ง สิ่งนี้สามารถปรับปรุงได้ก็ต่อเมื่อกระบวนการที่ใช้โหนด js (เช่น lessc) อนุญาตให้รวบรวมทรัพยากรในหน่วยความจำ
Alex Objelean

12
กระบวนการนี้สนับสนุนการMavenสร้างความgruntล้มเหลวหรือไม่หากการสร้างล้มเหลว
Snekse

6
งาน exec ใด ๆ ที่ไม่ส่งคืนอย่างถูกต้องควรทำให้การสร้างล้มเหลว stackoverflow.com/questions/3480162/…
เยอร์

24

สำหรับใครก็ตามที่ยังคงมองหาข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้หนึ่งในผู้สร้าง Yeoman มีบทความดีๆ (เขียนไม่กี่เดือนหลังจากที่ถามคำถามนี้ในตอนแรก) ซึ่งจะขยายคำตอบเดิมพร้อมรายละเอียดเพิ่มเติมเล็กน้อย:


ขอบคุณสองเท่า! ฉันพบว่าโพสต์นี้มีประโยชน์อย่างยิ่งและเป็นสิ่งที่ฉันกำลังมองหามากขึ้น
Ryan J. McDonough

13

นอกจากนี้ยังมี frontend-maven-plugin: https://stackoverflow.com/a/19600777/320399 มันดาวน์โหลด Node และ NPM สำหรับคุณ (ภายในโครงการของคุณ) ดาวน์โหลด Grunt ผ่าน NPM นั้น (ดำเนินการโดยโหนดนั้น) จากนั้น เรียกใช้ Grunt (ผ่านโหนดนั้น) มันเป็นการบูตด้วยตัวเองและคุณไม่จำเป็นต้องติดตั้ง Node บนเครื่องเพื่อสร้างโครงการ เพียงคำสั่งเดียว mvn ติดตั้ง


13

คุณอาจต้องการชำระเงินhttp://jhipster.github.io/ : เป็นเครื่องกำเนิดไฟฟ้าของ Yeoman ที่สร้างแอปพลิเคชันที่มี Maven, Grunt และ Bower ทั้งหมดทำงานร่วมกัน

มันเหมือนกับตัวเลือกที่สามของคุณ แต่ทุกอย่างได้รับการกำหนดค่าให้คุณซึ่งไม่ใช่เรื่องง่าย นอกจากนี้ยังสร้างบริการ AngularJS และ Java REST พื้นฐานสำหรับคุณ


1
สายเกินไปที่โครงการของฉันจะเริ่มต้นด้วยแอปพลิเคชันที่สร้างขึ้นใหม่ แต่นี่เป็นสิ่งที่ยอดเยี่ยมและเป็นประโยชน์มากฉันจะให้ยืมโซลูชันบางส่วนจากแอปพลิเคชันที่สร้างขึ้นและใช้ในโครงการของฉัน ขอบคุณ!
Matsemann

2
จริงๆแล้วคุณต้องรวมปลั๊กอิน yeoman-maven-plugin และสิ่งนี้ช่วยให้คุณสามารถใส่สิ่งกำหนดค่า JavaScript ทั้งหมด (bower, npm, grunt) เป็นพี่น้องกับ pom.xml (ตรงที่ไฟล์เหล่านี้ควรเป็นของ IMO) และเมื่อ mvn ติดตั้งมันจะสร้างทุกอย่าง - รวมถึงเว็บแอพของคุณภายใต้ src / main / webapp ฉันใช้เวลาไม่ถึงครึ่งชั่วโมงในการย้ายโครงการที่มีอยู่ไปยังโครงสร้างนั้น แน่นอนว่าคุณควรดูแอปตัวอย่างที่github.com/jhipster/jhipster-sample-app
raven_arkadon

4

หลังจากใช้เวลาไม่กี่ชั่วโมงกับปัญหานี้ฉันสามารถพูดได้ว่า:

maven และฮึดฮัดเล่นไม่ดี แต่บังคับได้ ..

นี่คือคำอธิบายปลั๊กอินสำหรับการเรียกใช้Grunt ผ่าน Maven build

ฉันหวังว่านี่จะช่วยได้ :)


ขอบคุณสำหรับคำตอบมันช่วยได้ แต่ฉันจะลองดูตามคำตอบของ @Baer
เป็นโมฆะ

9
ส่วนสำคัญที่อ้างถึงนั้นตายไปแล้ว
Peter Butkovic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.