Javascript web uygulaması ve Java sunucusu, hepsini Maven'de mi oluşturuyorsunuz yoksa Grunt for web uygulaması mı kullanıyorsunuz?


97

AngularJS ile bir web uygulaması yapıyoruz ve Bağımlılık Yönetimi için Bower, testler yapmak vb. İçin Grunt kullanma fikrini seviyoruz ( Yeoman )

Sunucu Java ile Maven kullanılarak yapılır, bu yüzden elbette basit bir mvn installher şeyi (web uygulaması + sunucu) oluşturmak isteriz.

Öyleyse hangi yaklaşımı izlediniz ve neden?

1) Onları iki farklı uygulama olarak ele alın, aslında öyleler. Bu nedenle, farklı inşa yöntemlerinin / araçlarının kullanılması kabul edilebilir.

2) Grunt Bower'ı unutun, web uygulaması için Maven eklentilerini oluşturmak, testleri çalıştırmak, bağımlılıkları yönetmek için kullanın. Eğer durum buysa, hangileri?

3) Ön uç web uygulamasını oluşturmak üzere Grunt'ı çağırmak için Maven exec eklentisini kullanın. Bunu bir çözümden çok bir hack olarak görüyorum.

4) Diğer.

Jenkins ile entegre edilmesi kolay bir yaklaşım bir artıdır.

Şimdiden teşekkürler!


2
3 yıl sonra, araç entegrasyonu açıkça gelişti. Bu maven eklentisi birçok şeyi kapsıyor gibi görünüyor: github.com/eirslett/frontend-maven-plugin
earcam

Yanıtlar:


73

Bir süre Java araç setindeki her varlık ardışık düzeni aracı ile çalıştıktan sonra birkaç sonuca vardım:

Java Tabanlı Araçlar

Piyasada bir avuç araç var ama en popülerleri JAWR ve Wro4J. Bunların her ikisiyle ilgili en büyük sorun, çoğunlukla Rhino tabanlı olmaları (WRO4J'in artık biraz Node desteğine sahip olması) ve Rhino'nun Düğüm tabanlı araçlara kıyasla köpek yavaş olmasıdır. Ayrıca JavaScript araçlarının hızla olgunlaştığını da göz önünde bulundurmalısınız, bu nedenle hızlı hareket edebilen araçlar aramanız gerekir.

  • WRO4J - Destek harika, Maven VE Eclipse entegrasyonu harika, eklenti listesi kapsamlı ve çerçeve yeterince esnektir, biraz dirsek yağıyla ihtiyacınız olan her şey için bir eklenti yazabilirsiniz. Java tabanlı bir varlık ardışık düzeni ile sınırlıysanız, kesinlikle gidilecek yol budur. Wro4j ile ilgili sorun, Düğüm tabanlı araçlara göre yavaş olmasıdır (Düğüm işlemlerini başlatsa bile).
    LESS, CSS CoffeeScript ve JavaScript içeren 25 varlık paketini derleyen ve birleştiren bazı gerçek sayılar vermek, Rhino kullanırken yaklaşık 35 saniye ve 16G RAM ile 2013 iMac'te Wro4j'in Node desteğini kullanarak yaklaşık 15 saniye sürer. Grunt + Node'u kullanmak cılız MacBook Air'imde yaklaşık 2 saniye sürer.

  • JAWR - Entegrasyonlar ve özellik listesi oldukça iyi ancak dokümanlar harika değil ve kendi eklentilerinizi yazmak biraz zor olabilir. Bu yazıyı ilk yazdığımda, JAWR 4 yıllık bir aranın ortasındaydı, ancak şimdi Ocak 2014 itibariyle aktif geliştirme aşamasındadır. Java Araçlarını araştırmayı seçerseniz, bu araştırmaya değer.

Düğüm Tabanlı Aletler (Ant / Maven Builds ile entegre)

  • Grunt - Kolay, harika bir eklenti ekosistemi var ve topluluk muazzam. Yapmanız gereken bir şey varsa, bunun için bir eklenti olduğuna bahse girebilirsiniz - muhtemelen grunt yaratıcıları tarafından yazılmış bir eklenti bile. Grunt'a yönelik başlıca eleştiriler, çok kolay bir kurulum sağlayan ancak "Düğüm Yolu" olmayan konfigürasyon güdümlü olmasıdır. Ayrıca Grunt görevlerinin kolayca oluşturulamayacağından bahsetmeye değer, bu nedenle karmaşık bir JavaScript derleme boru hattı için Grunt ideal olmayabilir.

  • Gulp - Gulp, Grunt'un hızla büyüyen alternatifidir. Varsayılan olarak eşzamanlıdır ve derlemenizi önemli ölçüde hızlandırabilecek dosya sistemine geçici yazmaları önlemek için akışları kullanır. Gulp çok deyimlidir ve kod> konfigürasyona vurgu yapar ve bu size çok fazla güç sağlarken, JavaScript konusunda temel yetkinliğe sahip olmayan ekipler için ideal değildir.

Sadece potansiyel JavaScript tabanlı takım için asmak sahip olmak zorunda kalacak olmasıdır Düğüm , UÖM ve hırıltı-cli / yutkunmak ihtiyaçları derleme yapmak herhangi bir makinede. CI makinelerinize erişiminiz yoksa veya yapay temelli dağıtımları kullanmıyorsanız, bu zor bir satış olabilir.

Bunu Maven projenize entegre etmek oldukça kolaydır ve epeyce seçeneğiniz vardır. Maven ant-run eklentisini kullanabilir , bir ant exec görevi çalıştırabilir ve Maven'den çağırabilir veya en iyisi sadece maven exec görevini kullanabilirsiniz .
Aşağıda, eğer herhangi biri için yararlıysa, exec eklentisini kullanarak bunu Maven yaşam döngüsüne entegre etmek için kod var.

    <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
Detaylı cevap için teşekkürler. Düğüm Tabanlı Takımlama seçeneğine gideceğimi düşünüyorum. Grunt'ta yeni Şimdiye kadar gördüklerimi beğendim ve iki dünyanın en iyisine sahip olsaydım harika olurdu. WRO4J ve JAWR varlığını bilmiyordum. Tekrar teşekkürler.
geçersiz

wro4j, performansı node.js yerel işlemciyle karşılaştırılabilir olan less.js'nin java tabanlı uygulaması olan less4j işlemcisini entegre eder.
Alex Objelean

1
Wro4j'nin node.js ile o kadar hızlı olmamasının nedeni, çoğunlukla her yürütme için disk IO işlemleri gerektirmesidir. Bu, yalnızca node.js tabanlı süreçler (lessc gibi) kaynakların bellek içi derlemesine izin verirse geliştirilebilir.
Alex Objelean

12
Bu işlem Maven, gruntderleme başarısız olursa derlemenin başarısız olmasını destekliyor mu?
Snekse

6
Düzgün bir şekilde dönmeyen herhangi bir exec görevi, derlemede başarısız olmalıdır. stackoverflow.com/questions/3480162/…
Baer

24

Hala bu konu hakkında daha fazla bilgi arayanlar için, Yeoman'ın yaratıcılarından birinin orijinal cevabı biraz daha ayrıntıyla genişleten güzel bir makalesi var (bu soru sorulduktan birkaç ay sonra yazılmış):


Çifte teşekkürler! Bu yazının son derece yararlı olduğunu ve aradığım şeyin daha çok olduğunu fark ettim
Ryan

13

Ayrıca ön uç-maven-eklentisi de var: https://stackoverflow.com/a/19600777/320399 Sizin için Düğüm ve NPM'yi (yerel olarak projenize) indirir, bu NPM aracılığıyla Grunt'u indirir (bu Düğüm tarafından çalıştırılır) ve sonra Grunt'ı çalıştırır (bu Düğüm aracılığıyla). Kendi kendine önyükleme yapar ve projeyi oluşturmak için makineye Node'un yüklenmesine gerek yoktur. Sadece bir komut; mvn kurulumu.


13

Http://jhipster.github.io/ adresini kontrol etmek isteyebilirsiniz : Bu, Maven, Grunt ve Bower'ın birlikte çalıştığı bir uygulama oluşturan bir Yeoman jeneratördür.

Bu biraz üçüncü seçeneğinize benziyor, ancak her şey sizin için yapılandırılmış, bu o kadar kolay değil. Aynı zamanda sizin için temel AngularJS ve Java REST hizmetlerini de üretir.


1
Projemin yeni oluşturulmuş bir uygulamayla başlaması için çok geç. Ama bu harika ve çok faydalı, oluşturulan uygulamadan bazı çözümleri ödünç vereceğim ve projemde kullanacağım. Teşekkürler!
Matsemann

2
Aslında, sadece yeoman-maven-eklentisini eklemeniz yeterlidir ve bu, tüm JavaScript yapılandırma öğelerini (bower, npm, grunt) kardeşler olarak pom.xml'ye (tam olarak bu dosyaların IMO'ya ait olması gereken yere) koymanıza olanak tanır. mvn install, src / main / webapp altındaki web uygulamanız dahil olmak üzere her şeyi oluşturacaktır. Mevcut bir projeyi bu yapıya taşımak yarım saatten az sürdü. Elbette github.com/jhipster/jhipster-sample-app
raven_arkadon

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.