Spring Boot - parent pom เมื่อคุณมี parent pom อยู่แล้ว


184

มีแนวทางที่แนะนำเฉพาะในการรวม pom parent-boot spring ลงในโครงการที่มี POM parent ที่ต้องการหรือไม่?

คุณแนะนำอะไรให้กับโครงการที่ต้องขยายจากองค์กรหลัก (นี่เป็นเรื่องธรรมดามากและแม้แต่บางโครงการที่เป็นส่วนใหญ่ / ส่วนใหญ่ที่เผยแพร่ไปยังศูนย์กลาง Maven ขึ้นอยู่กับ repos ของผู้ให้บริการที่มา) สิ่งสร้างส่วนใหญ่เกี่ยวข้องกับการสร้าง JAR ที่สามารถเรียกใช้งานได้ (เช่นการรัน Tomcat / Jetty แบบฝัง) มีวิธีการจัดโครงสร้างสิ่งต่าง ๆ เพื่อให้คุณสามารถได้รับการอ้างอิงทั้งหมดโดยไม่ต้องขยายจากผู้ปกครอง (คล้ายกับองค์ประกอบเทียบกับการสืบทอด) คุณไม่สามารถสร้างสิ่งที่เป็นแบบนั้นได้

ดังนั้นจึงเป็นการดีที่จะรวม parent pom ของ spring-boot ทั้งหมดไว้ใน POM พาเรนต์ที่ต้องการหรือเพื่อให้มีการพึ่งพา POM ภายในไฟล์ POM ของโครงการ

ตัวเลือกอื่น?

เตี้ย

สกอตต์

คำตอบ:


179

คุณสามารถใช้ spring-boot-starter-parent เช่น "bom" (cf Spring and Jersey โปรเจ็กต์อื่นที่สนับสนุนฟีเจอร์นี้) และรวมไว้ในส่วนการจัดการการพึ่งพาที่มีขอบเขต = นำเข้าด้วยวิธีนี้คุณจะได้รับมาก ของประโยชน์ของการใช้มัน (เช่นการจัดการการพึ่งพา) โดยไม่ต้องเปลี่ยนการตั้งค่าในผู้ปกครองที่แท้จริงของคุณ

2 สิ่งสำคัญอื่น ๆ ที่มันเป็น

  1. กำหนดภาระของคุณสมบัติสำหรับการตั้งค่ารุ่นที่ขึ้นต่อกันที่คุณต้องการแทนที่อย่างรวดเร็ว
  2. กำหนดค่าปลั๊กอินบางอย่างด้วยการกำหนดค่าเริ่มต้น (โดยหลักแล้วคือปลั๊กอิน Spring Boot maven) ดังนั้นสิ่งเหล่านี้คือสิ่งที่คุณจะต้องทำด้วยตนเองหากคุณใช้พ่อแม่ของคุณเอง

ตัวอย่างที่ให้ไว้ในเอกสารประกอบ Spring Boot :

<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
ฉันเดาว่าสิ่งนี้จะดึงปลั๊กอิน - แรเงา ฯลฯ หรือไม่
chrislovecnm

3
ไม่อ่านลิงค์: "คุณยังคงได้รับประโยชน์จากการจัดการการพึ่งพา (แต่ไม่ใช่การจัดการปลั๊กอิน)"
Dave Syer

1
@DaveSyer โปรดอธิบาย: 1: เมื่อฉันมีการกำหนดเองของproject-parentฉันฉันสามารถเพิ่มspring-boot-starter-parentในนี้project-parent- มันตกลงไหม? ฉันยังต้องการspring-boot-dependenciesในสถานการณ์เช่นนี้หรือไม่? 2: โครงการสปริงบูตปกติฉันทำงานโดยใช้สปริงบู๊ท: เรียกใช้ วิธีเรียกใช้โครงการที่มี parent pom แตกต่างกันอย่างไร
jsosnowski

1
ข้อมูลโค้ดข้างต้นเพียงพอที่จะรับคุณลักษณะการจัดการการพึ่งพา หากคุณต้องการปลั๊กอิน (เช่นspring-boot:run) คุณต้องแยกส่วนที่แยกออกจากกัน คุณสามารถคัดลอกวางจากพาเรนต์บูตได้หากต้องการ
Dave Syer

3
ฉันรู้ว่ามันเป็นด้ายเก่า แต่ก็ช่วยฉันได้มากขอบคุณ ฉันสิ้นสุดการอ่านเกี่ยวกับกลไกนี้ที่แหล่งที่มาmaven.apache.org/guides/introduction/... มันอธิบายได้มากมาย
bazeusz

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>

แต่นั่นยังไม่เพียงพอคุณต้องกำหนดเป้าหมายอย่างชัดเจนสำหรับ spring-boot-maven-plugin (หากคุณใช้ Spring Boot เป็นผู้ปกครองคุณไม่จำเป็นต้องกำหนดสิ่งนี้อย่างชัดเจน)

    <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>

มิฉะนั้นคุณไม่สามารถสร้างเป็น jar หรือสงครามที่ปฏิบัติการได้

ยังถ้าคุณใช้ 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]

ไม่ไม่นี่ยังไม่เพียงพอหากคุณใช้ Maven Profile และ Resource Filter พร้อม Spring Boot ด้วย "@" แทนที่จะเป็น "$ {}" (เช่นตัวอย่างนี้https://www.surasint.com/spring-boot-maven -resource-filter / ) จากนั้นคุณต้องเพิ่มสิ่งนี้ใน

    <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 (เปิดตัวเมื่อวาน) เนื่องจากรุ่นนี้มีการแก้ไขปัญหาด้านความปลอดภัยที่ร้ายแรง
Surasin Tancharoen

ดังที่ได้กล่าวไปแล้วในบล็อกของคุณฉันพยายามเพิ่ม maven-resources-plugin ฉันพยายามใช้ boot-boot: ทำงานนี่ก็ไม่ทำงาน :(
sagar27

@ sagar27 คุณใช้เวอร์ชัน 1.5.X หรือ 2.x หรือไม่ ถ้ามันเป็น 2.x มันอาจต้องมีอะไรมากกว่านี้
Surasin Tancharoen

ขอบคุณ !! คุณช่วยชีวิตฉันไว้
Jey Atiwat

0

ตามคำตอบของ Surasin Tancharoen คุณอาจต้องการกำหนด maven surefire plugin

        <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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.