स्प्रिंग बूट - पैरेंट पोम जब आपके पास पहले से ही पेरेंट पोम है


184

क्या स्प्रिंग-बूट पैरेंट पोम को उन परियोजनाओं में शामिल करने के लिए एक विशिष्ट अनुशंसित दृष्टिकोण है, जिनके पास पहले से ही एक आवश्यक पैरेंट पोम है?

आप उन परियोजनाओं के लिए क्या सलाह देते हैं जो एक संगठनात्मक माता-पिता से विस्तारित करने की आवश्यकता है (यह बेहद सामान्य है और यहां तक ​​कि मावेन केंद्रीय के लिए प्रकाशित कई / अधिकांश परियोजनाएं फीडर रेपो के आधार पर प्रकाशित होती हैं)। अधिकांश निर्मित सामान निष्पादन योग्य JAR (उदाहरण के लिए एम्बेडेड Tomcat / Jetty चलाने) से संबंधित है। चीजों को संरचना करने के तरीके हैं ताकि आप एक माता-पिता (रचना बनाम विरासत के समान) से विस्तार किए बिना सभी निर्भरताएं प्राप्त कर सकें। आप हालांकि इस तरह से एक निर्माण सामग्री प्राप्त नहीं कर सकते।

तो क्या यह आवश्यक है कि POM फ़ाइल के भीतर सभी स्प्रिंग-पैरेंट पोम को आवश्यक पैरेंट POM के अंदर शामिल किया जाए या केवल POM डिपेंडेंसी हो।

अन्य विकल्प?

TIA,

स्कॉट

जवाबों:


179

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

2 मुख्य अन्य चीजें जो यह करती हैं

  1. ओवरराइड करने के लिए निर्भरता के संस्करणों को जल्दी से सेट करने के लिए गुणों का एक भार निर्धारित करें
  2. डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ कुछ प्लगइन्स कॉन्फ़िगर करें (मुख्यतः स्प्रिंग बूट मावेन प्लगइन)। तो वे चीजें हैं जो आपको स्वयं करनी होंगी यदि आप अपने माता-पिता का उपयोग करते हैं।

स्प्रिंग बूट प्रलेखन में उदाहरण दिया गया है :

<dependencyManagement>
    <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

1
मुझे लगता है कि यह प्लग - शेड आदि में खींच रहा है?
क्रिसलोवेस्कैम

3
नहीं। लिंक पढ़ें: "आप अभी भी निर्भरता प्रबंधन (लेकिन प्लगइन प्रबंधन नहीं) का लाभ रख सकते हैं"।
डेव सीर

1
@DaveSyer स्पष्ट करें: 1: जब मैं अपने कस्टम है project-parentमैं जोड़ सकता है spring-boot-starter-parentयह करने के लिए project-parent- यह ठीक है? क्या मुझे spring-boot-dependenciesऐसी स्थिति में भी आवश्यकता है? 2: सामान्य स्प्रिंग-बूट प्रोजेक्ट मैं स्प्रिंग-बूट का उपयोग करके चलाता हूं: रन। विभिन्न जनक पोम के साथ प्रोजेक्ट कैसे चलाएं?
jsosnowski

1
ऊपर कोड स्निपेट निर्भरता प्रबंधन सुविधाओं को प्राप्त करने के लिए पर्याप्त है। यदि आप प्लगइन्स (जैसे spring-boot:run) चाहते हैं तो आपको उन्हें अलग से कन्फ्यूज करना होगा। आप चाहें तो बूट पैरेंट से पेस्ट कॉपी कर सकते हैं।
डेव सीर

3
मुझे पता है कि यह एक पुराना धागा है लेकिन इसने मुझे बहुत मदद की, धन्यवाद। मैंने इस तंत्र के बारे में maven.apache.org/guides/introduction/… के स्रोत पर पढ़ना समाप्त कर दिया । यह बहुत कुछ समझाता है।
बेज़ुस्सज

42

अपडेट 2018-01-04 को 1.5.9 के साथ। जारी करें।

मेरे पास पूर्ण कोड और रन करने योग्य उदाहरण है यहाँ https://www.surasint.com/spring-boot-with-no-parent-example/

आपको एक बुनियादी के रूप में इसकी आवश्यकता है

   <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${springframework.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

लेकिन यह पर्याप्त नहीं है, आपको स्प्रिंग-बूट-मावेन-प्लगइन के लिए स्पष्ट रूप से परिभाषित लक्ष्य की आवश्यकता है (यदि आप पैरेंट के रूप में स्प्रिंग बूट का उपयोग करते हैं, तो आपको इसे स्पष्ट रूप से परिभाषित करने की आवश्यकता नहीं है)

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${springframework.boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

अन्यथा आप निष्पादन योग्य जार या युद्ध के रूप में निर्माण नहीं कर सकते।

अभी तक नहीं, अगर आप JSP का उपयोग कर रहे हैं, तो आपको यह करने की आवश्यकता है:

<properties>    
  <failOnMissingWebXml>false</failOnMissingWebXml>
</properties>

अन्यथा, आपको यह त्रुटि संदेश मिलेगा:

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project spring-boot-09: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executi
ng in update mode) -> [Help 1]

नहीं, यह अभी भी पर्याप्त नहीं है यदि आप "$ {}" के बजाय "@" के साथ स्प्रिंग बूट के साथ मावेन प्रोफाइल और रिसोर्स फ़िल्टर का उपयोग कर रहे हैं (जैसे उदाहरण https://www.surasint.com/spring-boot-maven -स्त्रोत-फ़िल्टर / )। फिर आपको इसे स्पष्ट रूप से जोड़ना होगा

    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

और इस में

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <delimiters>
                    <delimiter>@</delimiter>
                </delimiters>
                <useDefaultDelimiters>false</useDefaultDelimiters>
            </configuration>
        </plugin>

लिंक https://www.surasint.com/spring-boot-with-no-parent-example/ में उदाहरण देखें ।


@ अरविंद एक चेतावनी, मेरा उदाहरण 1.5.9 है। आपको 1.5.11 (कल रिलीज़) का उपयोग करना चाहिए क्योंकि इस संस्करण में एक गंभीर सुरक्षा समस्या के लिए एक समाधान है।
सुरसिन तन्खारोएन

जैसा कि आपके ब्लॉग में उल्लेख किया गया है, मैंने मावेन-संसाधनों-प्लगइन को जोड़ने की कोशिश की, लेकिन फिर भी मुझे "लक्ष्य में कोई मुख्य अभिव्यक्ति विशेषता नहीं" दी गई। मैंने स्प्रिंग-बूट चलाने की कोशिश की: रन, यह भी काम नहीं कर रहा है :(
सागर

@ sagar27 जो संस्करण आप 1.5.X या 2.x का उपयोग कर रहे हैं? अगर यह 2.x है, तो इसे और अधिक चीज़ की आवश्यकता हो सकती है।
सुरसिन तन्खारोने

धन्यवाद !! आपने मेरे प्राण बचाए
Jey Atiwat

0

सुरसिन तन्खारोँ के उत्तर के अनुसार, आप मावेन अचूक प्लगइन को परिभाषित करना चाह सकते हैं

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${maven-surefire-plugin.version}</version>
        </plugin>

और संभवतः विफल-फास्ट प्लगइन शामिल हैं

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>${maven-failsafe-plugin.version}</version>
        <executions>
            <execution>
                <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.