หลีกเลี่ยงความขัดแย้งของเวอร์ชันอ้างอิงหรือไม่


10

โปรเจ็กต์ Java ใด ๆ ที่ใช้โถของฉันเกือบจะมีการพึ่งพาเพิ่มเติมในโถอื่นซึ่งแน่นอนว่าโถของฉันยังมีการพึ่งพา

ปัญหาคือว่าโถอื่นมีหลายรุ่น

ฉันจะหลีกเลี่ยงปัญหาใด ๆ ที่อาจเกิดขึ้นได้ในกรณีที่เป็นไปได้ว่ารุ่นที่ 2 ของโครงการของคุณแตกต่างจากรุ่นที่ 2 ของ jar ของฉันอย่างไร

ฉันไม่ต้องการให้ผู้ใช้ของฉันมีความยุ่งยากเป็นพิเศษในการทำเคล็ดลับการจัดหมวดหมู่แฟนซีเพื่อเพิ่มโถของฉัน

ฉันควรทำไห้รุ่นต่าง ๆ ของฉันสำหรับทุกรุ่นที่เป็นไปได้ของการพึ่งพากันทั่วไปหรือไม่? และจากนั้นคุณเพียงแค่เลือกรุ่น jar ของฉันที่ใช้รุ่น jar รุ่นที่ 2 ที่คุณเคยมีมาแล้วใช่ไหม

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

คำตอบ:


10

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

ซอฟต์แวร์ของคุณควรทำงานอย่างถูกต้องกับการอ้างอิงล่าสุดของคุณ หากการพึ่งพานั้นกำลังเปลี่ยนแปลงส่วนต่อประสานของพวกเขาในทุก ๆ รุ่นคุณควรมีช่วงของความเข้ากันได้ (เช่นซอฟต์แวร์ของคุณสามารถทำงานได้กับทุกรุ่นในช่วง [2.0.0, 3.0.0)) ตราบใดที่คุณยังคงรักษาซอฟต์แวร์ไว้คุณควรพยายามให้มันเข้ากันได้กับเวอร์ชั่นล่าสุดของการอ้างอิงทั้งหมดของคุณ

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

  • ถ้าการรวมระหว่างโครงการของคุณกับโครงการอื่นนั้นแน่นจะเป็นประโยชน์หากมีแผนภูมิที่เข้ากันได้ในเอกสารของคุณ ไม่ว่าคุณจะกล่าวถึงปัญหาใด ๆ ที่ทราบเกี่ยวกับการอ้างอิงในเอกสารของคุณ ไม่เช่นนั้นนักพัฒนาจะต้องค้นหาเวอร์ชั่นที่เข้ากันได้โดยการลองผิดลองถูก
  • บทคัดย่อความร่วมมือกับการพึ่งพาผ่านอินเทอร์เฟซและออกแบบซอฟต์แวร์ของคุณเพื่อให้การใช้งานสามารถทดแทนได้ด้วยการฉีดพึ่งพา นั่นทำให้ฉันในฐานะผู้ใช้ปลายทางแทนการรวมตัวเองของฉันกับไลบรารี่รุ่น x โดยไม่รบกวนคุณ
  • มีตัวติดตามปัญหาสาธารณะเพื่อให้ผู้ใช้ของคุณสามารถขอให้คุณสนับสนุนการพึ่งพาทั่วไปบางเวอร์ชัน หากคุณพบว่าผู้ใช้หลายคนต้องการการสนับสนุนสำหรับการพึ่งพารุ่นที่เข้ากันไม่ได้คุณสามารถเผยแพร่เวอร์ชันสำหรับทั้งสอง ดูตัวอย่าง Mavenที่พวกเขากำหนดเป้าหมายหลายแพลตฟอร์ม - การสนับสนุนรุ่นที่แตกต่างกันของการพึ่งพาควรจะคล้ายกัน

Java มีบางอย่างเช่นแอสเซมบลีผูกพันผูกพันการตั้งค่า App.config ใน. NET ที่คุณสามารถระบุ "ห้องสมุดขอพึ่งพา Foo v3.0.2 จริง ๆ แล้วควรใช้ Foo v3.0.5 และแสร้งเหมือนมันเป็น v3.0.2"? ฉันไม่ได้ทำ Java มานานกว่า 11 ปีแล้วดังนั้นความทรงจำของฉันเกี่ยวกับวิธีจัดการเรื่องนี้เป็นเพียงแค่ GONE
John Zabroski
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.