जावास्क्रिप्ट वेब ऐप और जावा सर्वर, मावेन में सभी का निर्माण करें या वेब ऐप के लिए ग्रंट का उपयोग करें?


97

हम AngularJS के साथ एक वेब एप्लिकेशन कर रहे हैं और हमें बिल्डिंग, रनिंग टेस्ट आदि के लिए निर्भरता प्रबंधन और ग्रंट के लिए बोवर का उपयोग करने का विचार पसंद है ( येओमान )

सर्वर जावा के साथ मावेन का उपयोग करके किया जाता है, इसलिए निश्चित रूप से हम एक साधारण mvn installबिल्ड सब कुछ (वेब ​​एप्लिकेशन + सर्वर) के साथ चाहेंगे

तो आपने क्या तरीका अपनाया और क्यों?

1) उन्हें दो अलग-अलग अनुप्रयोगों के रूप में समझो, जो वास्तव में वे हैं। इसलिए विभिन्न निर्माण विधियों / उपकरणों का उपयोग स्वीकार्य है।

2) ग्रन्ट बोवर के बारे में भूल जाओ, वेब एप्लिकेशन के निर्माण, परीक्षण चलाने, निर्भरता का प्रबंधन करने के लिए मावेन प्लगइन्स का उपयोग करें। अगर ऐसा है तो कौन सा है?

3) फ्रंट-एंड वेबैप बनाने के लिए ग्रंट को कॉल करने के लिए मावेन एक्ज़क्यूट प्लगइन का उपयोग करें। मैं इसे एक समाधान से अधिक हैक के रूप में देखता हूं।

4) अन्य।

जेनकिंस के साथ एकीकृत करने के लिए दृष्टिकोण लगभग एक प्लस है।

अग्रिम में धन्यवाद!


2
3 साल, उपकरण एकीकरण में स्पष्ट रूप से सुधार हुआ है। इस मावेन प्लगइन में अधिकांश चीजें शामिल हैं: github.com/eirslett/frontend-maven-plugin
earcam

जवाबों:


73

जावा टूलकिट में हर परिसंपत्ति पाइपलाइन उपकरण के साथ काम करने के बाद कुछ समय के लिए मैं कुछ निष्कर्ष पर आया हूं:

जावा आधारित टूलींग

वहाँ मुट्ठी भर उपकरण हैं, लेकिन सबसे लोकप्रिय JAWR और Wro4J हैं। इन दोनों के साथ सबसे बड़ी समस्या यह है कि वे ज्यादातर राइनो आधारित होते हैं (WRO4J में अब कुछ नोड सपोर्ट है) और राइनो कुत्ते पर आधारित है जो कि नोड आधारित टूल की तुलना में धीमा है। आपको यह भी विचार करना होगा कि जावास्क्रिप्ट टूलींग तेजी से परिपक्व हो रही है, इसलिए आपको ऐसे उपकरणों की तलाश करनी चाहिए जो जल्दी से आगे बढ़ सकें।

  • WRO4J - समर्थन महान है, मेवेन और एक्लिप्स एकीकरण महान हैं प्लगइन्स की सूची व्यापक है और रूपरेखा पर्याप्त लचीली है कि कुछ कोहनी ग्रीस के साथ आप जो कुछ भी ज़रूरत है उसके लिए एक प्लगइन लिख सकते हैं। यदि आप जावा आधारित परिसंपत्ति पाइपलाइन तक ही सीमित हैं, तो यह निश्चित रूप से जाने का रास्ता है। Wro4j के साथ मुद्दा यह है कि यह नोड आधारित टूल के सापेक्ष धीमा है (तब भी जब यह नोड प्रक्रियाओं को बंद करता है)।
    LESS युक्त 25 एसेट बंडलों को संकलित और सुगम बनाने के लिए कुछ वास्तविक दुनिया की संख्याएँ देने के लिए, CSS कॉफीस्क्रिप्ट और जावास्क्रिप्ट राइनो का उपयोग करते समय लगभग ~ 35s लेते हैं और ~ 15s का उपयोग करते हुए Wro4j के नोड समर्थन का उपयोग करते हुए 16G RAM के साथ iMac। Grunt + Node का उपयोग करने से मेरी पुरी मैकबुक एयर पर लगभग 2s लगते हैं।

  • JAWR - एकीकरण और सुविधा सूची बहुत अच्छी हैं, लेकिन डॉक्स महान नहीं हैं और अपने स्वयं के प्लगइन्स को लिखना थोड़ा मुश्किल हो सकता है। जब मैंने मूल रूप से इस पोस्ट को लिखा था JAWR 4 साल के अंतराल के बीच में था, लेकिन अब जनवरी 2014 तक सक्रिय विकास के तहत वापस आ गया है। यदि आप जावा टूल्स की जांच करना चुनते हैं तो यह जांच के लायक है।

नोड आधारित टूलिंग (चींटी / मावेन बिल्ड के साथ एकीकृत)

  • ग्रंट - यह आसान है, एक शानदार प्लगइन पारिस्थितिकी तंत्र है और समुदाय बड़े पैमाने पर है। अगर आपको कुछ करने की ज़रूरत है, तो आप शर्त लगा सकते हैं कि इसके लिए एक प्लगइन है - संभवतः ग्रंट के रचनाकारों द्वारा लिखित एक भी। ग्रंट की प्रमुख आलोचना यह है कि यह विन्यास चालित है जो बहुत ही सेटअप के लिए आसान बनाता है लेकिन "नोड वे" नहीं है। यह भी ध्यान देने योग्य है कि ग्रन्ट कार्य आसानी से स्वीकार्य नहीं हैं इसलिए एक जटिल जावास्क्रिप्ट बिल्ड पाइपलाइन के लिए ग्रंट आदर्श नहीं हो सकता है।

  • गल्प - गल्प ग्रन्ट का तेजी से बढ़ता विकल्प है। डिफ़ॉल्ट रूप से इसका समवर्ती और फ़ाइल सिस्टम में अस्थायी लिखने से बचने के लिए धाराओं का उपयोग करता है जो आपके निर्माण को काफी गति दे सकते हैं। गल्प बहुत मुहावरेदार है और इसमें कोड> कॉन्फ़िगरेशन पर जोर दिया गया है और इससे आपको बहुत शक्ति मिलती है यह उन टीमों के लिए आदर्श नहीं है जिनके पास जावास्क्रिप्ट में मुख्य योग्यता नहीं है।

जावास्क्रिप्ट आधारित टूलिंग के लिए एकमात्र संभावित लटका यह है कि आपको किसी भी मशीन पर नोड , एनपीएम और ग्रंट-क्ली / गल्प रखना होगा , जिसे संकलन करने की आवश्यकता है। यदि आपके पास अपनी CI मशीनों तक पहुंच नहीं है या आप कलाकृतियों पर आधारित कलाकृतियों का उपयोग नहीं कर रहे हैं तो यह एक कठिन बिक्री हो सकती है।

अपने मावेन प्रोजेक्ट में इसे एकीकृत करना बहुत आसान है और आपके पास काफी कुछ विकल्प हैं। आप मावेन एंटी-रन प्लगइन का उपयोग कर सकते हैं , आप एक एंट निष्पादन कार्य चला सकते हैं और इसे मावेन से कॉल कर सकते हैं या सबसे अच्छा आप केवल मावेन निष्पादन कार्य का उपयोग कर सकते हैं ।
यदि यह किसी के लिए भी मददगार है, तो कोड को प्लगइन के उपयोग से मावेन जीवनचक्र में एकीकृत करने के लिए कोड है।

    <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
विस्तृत उत्तर के लिए धन्यवाद। मुझे लगता है कि मैं नोड आधारित टूलिंग विकल्प के लिए जाऊंगा। न्यू टू ग्रंट मुझे वह पसंद है जो मैंने अब तक देखा है, और बहुत अच्छा होगा अगर मैं दो दुनियाओं में से सर्वश्रेष्ठ हो सकता हूं। मैं WRO4J और JAWR अस्तित्व के बारे में नहीं जानता था। एक बार फिर धन्यवाद।
शून्य

wro4j कम 4j प्रोसेसर को एकीकृत करता है जो कि जावा पर आधारित है।
एलेक्स ओब्जेलेन

1
कारण है कि wro4j नोड.जेएस के साथ इतना तेज़ नहीं है, ज्यादातर इसलिए क्योंकि इसमें प्रत्येक निष्पादन के लिए डिस्क IO संचालन की आवश्यकता होती है। यह तभी सुधारा जा सकता है जब नोड.जेएस आधारित प्रक्रियाएं (जैसे कि एलईसी) संसाधनों के इन-मेमोरी संकलन की अनुमति दें।
एलेक्स ओजेलियन

12
Mavenयदि gruntबिल्ड विफल रहता है तो क्या यह प्रक्रिया बिल्ड को विफल करने का समर्थन करती है?
स्नेक

6
कोई भी निष्पादित कार्य जो ठीक से वापस नहीं आता है, उसे निर्माण विफल होना चाहिए। stackoverflow.com/questions/3480162/…
Baer

24

इस विषय पर अधिक जानकारी के लिए अभी भी किसी के लिए, येमन के रचनाकारों में से एक का एक अच्छा लेख है (मूल रूप से इस प्रश्न के कुछ महीने बाद लिखा गया था) जो मूल उत्तर पर थोड़ा और विस्तार के साथ फैलता है:


डबल धन्यवाद! मैंने पाया कि यह पोस्ट बेहद मददगार थी और यह वह चीज थी जिसकी मुझे तलाश थी,
रयान जे। मैकडोनो

13

फिर इसमें फ्रंट-मावेन-प्लगइन भी है: https://stackoverflow.com/a/19600777/320399 यह आपके लिए (स्थानीय रूप से आपके प्रोजेक्ट के लिए) नोड और एनपीएम डाउनलोड करता है, उस एनपीएम के माध्यम से ग्रंट को डाउनलोड करें (उस नोड द्वारा चलाएं) और फिर ग्रंट चलाता है (उस नोड के माध्यम से)। यह स्व-बूटस्ट्रैपिंग है, और आपको प्रोजेक्ट बनाने के लिए मशीन पर स्थापित नोड की आवश्यकता नहीं है। सिर्फ एक आज्ञा; mvan इंस्टॉल करें।


13

आप http://jhipster.github.io/ को चेकआउट करना चाह सकते हैं : यह एक योमन जनरेटर है, जो एक एप्लिकेशन बनाता है जिसमें मावेन, ग्रंट और बोवर सभी एक साथ काम करते हैं।

यह आपके तीसरे विकल्प की तरह एक सा है, लेकिन आपके लिए सब कुछ कॉन्फ़िगर किया गया है, जो इतना आसान नहीं है। यह आपके लिए मूल AngularJS और Java REST सेवाएँ भी उत्पन्न कर रहा है।


1
मेरे प्रोजेक्ट के लिए नए सिरे से तैयार एप्लिकेशन के साथ शुरू होने में बहुत देर हो चुकी है। लेकिन यह महान और बहुत उपयोगी है, मैं अपनी परियोजना में उत्पन्न समाधान और उपयोग से कुछ समाधान उधार दूंगा। धन्यवाद!
मात्सेमन्न

2
वास्तव में, आपको बस तुर्क-मावेन-प्लगइन को शामिल करने की आवश्यकता है और यह आपको भाई के रूप में सभी जावास्क्रिप्ट कॉन्फिग सामान (बोवर, एनपीएम, ग्रंट) को pom.xml में डालने की अनुमति देता है (ठीक जहां इन फ़ाइलों को IMO होना चाहिए, और पर mvan इनस्टॉल यह सब कुछ बनाएगा - src / main / webapp के तहत आपके वेबएप सहित। एक मौजूदा प्रोजेक्ट को उस संरचना में पोर्ट करने के लिए मुझे आधे घंटे से भी कम समय लगा। बेशक आप एक उदाहरण ऐप पर पर नजर है चाहिए github.com/jhipster/jhipster-sample-app
raven_arkadon

4

इस समस्या पर कुछ घंटे बिताने के बाद, मैं यह कह सकता हूँ:

मावेन और ग्रंट अच्छी तरह से नहीं खेलते हैं, लेकिन इसे लागू किया जा सकता है।

यहाँ मावेन बिल्ड के माध्यम से ग्रंट चलाने के लिए एक प्लगइन विवरण दिया गया है

आशा है कि ये आपकी मदद करेगा :)


उत्तर के लिए धन्यवाद, यह मदद करता है हाँ, लेकिन मैं इसे @ जवाब के अनुसार कोशिश करूँगा।
शून्य

9
संदर्भित गिस्ट मर चुका है
पीटर बुटकोविक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.