การอ้างอิงที่แตกต่างกันสำหรับโปรไฟล์การสร้างที่แตกต่างกัน


115

เป็นไปได้ไหมที่จะมีชุดการอ้างอิงที่แตกต่างกันในไฟล์ maven pom.xml สำหรับโปรไฟล์ที่แตกต่างกัน?

เช่น

mvn -P debug
mvn -P release

ฉันต้องการรับไฟล์ jar การพึ่งพาอื่นในโปรไฟล์เดียวที่มีชื่อคลาสเดียวกันและการใช้งานอินเทอร์เฟซเดียวกันที่แตกต่างกัน


สามารถใช้เมื่อกำหนดเป้าหมายเว็บเซิร์ฟเวอร์ต่างๆ ตัวอย่างเช่นเมื่อสร้างเซิร์ฟเวอร์ JavaEE 5 ซึ่งมี libs เช่น JAXB ซึ่งคุณไม่ควรรวมไว้ในไฟล์ war ของคุณเทียบกับการสร้างเซิร์ฟเวอร์ JavaEE 1.4 ซึ่งคุณควรรวม jar JAXB
Leonel

คำตอบ:


174

หากต้องการอ้างอิงเอกสาร Maven เกี่ยวกับสิ่งนี้ :

องค์ประกอบโปรไฟล์มีทั้งการเปิดใช้งานที่เป็นทางเลือก (ทริกเกอร์โปรไฟล์) และชุดการเปลี่ยนแปลงที่จะทำกับ POM หากโปรไฟล์นั้นถูกเปิดใช้งาน ตัวอย่างเช่นโครงการที่สร้างขึ้นสำหรับสภาพแวดล้อมการทดสอบอาจชี้ไปที่ฐานข้อมูลอื่นนอกเหนือจากการปรับใช้ขั้นสุดท้าย หรือการอ้างอิงอาจถูกดึงออกมาจากที่เก็บที่แตกต่างกันขึ้นอยู่กับรุ่น JDK ใช้

(เน้นเป็นของฉัน)

เพียงแค่ใส่พึ่งพาสำหรับรายละเอียดภายในการประกาศรายละเอียดของตัวเองและทำเช่นเดียวกันสำหรับreleasedebug

<โปรไฟล์>
    <รายละเอียด>
        <ID> แก้ปัญหา </ ID>
        ...
        <อ้างอิง>
            <พึ่งพา> ... </ พึ่งพา>
        </ อ้างอิง>
        ...
    </ รายละเอียด>
    <รายละเอียด>
        <ID> ปล่อย </ ID>
        ...
        <อ้างอิง>
            <พึ่งพา> ... </ พึ่งพา>
        </ อ้างอิง>
        ...
    </ รายละเอียด>
</ โปรไฟล์>

2
วิธีนี้จะทำให้โค้ดไม่ได้รับการแก้ไขในโหมดแก้ไข หากการดีบักเปิดใช้งานอยู่โถการพึ่งพาของรีลีสจะหายไปและรหัสจะผิดพลาด จะแก้ไขได้อย่างไร?
brucenan

6
คุณสามารถตั้งค่าขอบเขตการอ้างอิงเฉพาะรีลีสเป็น 'ให้' ในลำดับชั้นการอ้างอิงและรีเซ็ตขอบเขตเป็น 'คอมไพล์' ในส่วนโปรไฟล์รีลีส เพื่อให้การอ้างอิงพร้อมใช้งานสำหรับการคอมไพล์ แต่ไม่ใช่ในสงครามสุดท้ายสำหรับโปรไฟล์ 'debug'
uday

@uday ถ้าคุณจะให้คำตอบแสดงว่าแนวทางนั้นฉันชอบที่จะ
โหวต

โปรไฟล์ IMHO ไม่มีประโยชน์อย่างน้อยสำหรับการอ้างอิง: IDE ให้ข้อผิดพลาดหยุดการแก้ไขการอ้างอิงแอปพลิเคชันไม่ทำงานในที่สุด ฉันคาดหวังมากขึ้น
Ares

6

groupId, artifactId ของคุณควรจะโทเค็นในโปรไฟล์ของคุณเป็นคุณสมบัติและคุณสามารถย้ายการอ้างอิงของคุณไปยังส่วนทั่วไปได้


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

คำตอบอื่นไม่ได้ผลสำหรับฉันเนื่องจากการอ้างอิงโปรไฟล์เริ่มต้นยังคงรวมอยู่พร้อมกับการอ้างอิงโปรไฟล์เฉพาะอื่น ๆ คำตอบของคุณใช้งานได้ดี
Vlad Mihalcea

@ วลาดคุณเอาการพึ่งพาออกจากตัวหลักของปอมหรือไม่? มิฉะนั้นคุณจะได้รับสองครั้ง (ดูstackoverflow.com/q/24855678/6944068เกี่ยวกับวิธีตรวจสอบให้แน่ใจว่าหนึ่งโปรไฟล์ใช้งานได้ตลอดเวลา)
toolforger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.