ปัญหาของแนวทางที่นิยม
คำตอบส่วนใหญ่ที่คุณจะพบในอินเทอร์เน็ตจะแนะนำให้คุณติดตั้งที่อ้างอิงไปยังที่เก็บในพื้นที่ของคุณหรือระบุขอบเขต "ระบบ" ในpom
และกระจายการพึ่งพากับแหล่งที่มาของโครงการของคุณ แต่โซลูชั่นทั้งสองนี้มีข้อบกพร่องจริง
ทำไมคุณไม่ควรใช้วิธีการ "ติดตั้งกับ Repo ท้องถิ่น"
เมื่อคุณติดตั้งการพึ่งพาที่เก็บในเครื่องของคุณมันจะยังคงอยู่ การกระจายสิ่งประดิษฐ์ของคุณจะทำได้ดีตราบใดที่มีการเข้าถึงที่เก็บนี้ ปัญหาคือในกรณีส่วนใหญ่ที่เก็บนี้จะอยู่ในเครื่องท้องถิ่นของคุณดังนั้นจะไม่มีวิธีแก้ไขการพึ่งพานี้ในเครื่องอื่น ๆ การทำให้สิ่งประดิษฐ์ของคุณชัดเจนขึ้นอยู่กับเครื่องเฉพาะไม่ใช่วิธีจัดการกับสิ่งต่าง ๆ มิฉะนั้นการพึ่งพานี้จะต้องถูกติดตั้งในเครื่องทุกเครื่องที่ทำงานกับโครงการนั้นซึ่งไม่ได้ดีไปกว่านี้
ทำไมคุณไม่ควรใช้แนวทาง "ขอบเขตระบบ"
ไหที่คุณขึ้นอยู่กับวิธีการ "ขอบเขตระบบ" ไม่ได้รับการติดตั้งในพื้นที่เก็บข้อมูลใด ๆ หรือแนบมากับแพ็คเกจเป้าหมายของคุณ นั่นเป็นสาเหตุที่แพ็คเกจการแจกจ่ายของคุณจะไม่มีวิธีแก้ไขการพึ่งพานั้นเมื่อใช้ ฉันเชื่อว่าเป็นเหตุผลว่าทำไมการใช้ขอบเขตระบบจึงเลิกใช้แล้ว อย่างไรก็ตามคุณไม่ต้องการพึ่งพาคุณลักษณะที่เลิกใช้แล้ว
โซลูชันพื้นที่เก็บข้อมูลแบบสแตติกในโครงการ
หลังจากใส่ลงไปในpom
:
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/repo</url>
</repository>
สำหรับสิ่งประดิษฐ์แต่ละรายการที่มีรหัสกลุ่มของแบบฟอร์มx.y.z
Maven จะรวมตำแหน่งต่อไปนี้ไว้ในโครงการของคุณในการค้นหาสิ่งประดิษฐ์:
repo/
| - x/
| | - y/
| | | - z/
| | | | - ${artifactId}/
| | | | | - ${version}/
| | | | | | - ${artifactId}-${version}.jar
เพื่ออธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้คุณสามารถอ่านโพสต์บล็อกนี้
ใช้ Maven เพื่อติดตั้งเพื่อทำโครงการ repo
แทนที่จะสร้างโครงสร้างนี้ขึ้นมาเองฉันแนะนำให้ใช้ Maven plugin เพื่อติดตั้งไหของคุณเป็นสิ่งประดิษฐ์ ดังนั้นเพื่อติดตั้งสิ่งประดิษฐ์ไปยังที่เก็บในโครงการภายใต้repo
โฟลเดอร์ดำเนินการ:
mvn install:install-file -DlocalRepositoryPath=repo -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]
หากคุณเลือกวิธีนี้คุณจะสามารถทำให้การประกาศในที่เก็บง่ายขึ้นpom
เพื่อ:
<repository>
<id>repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
สคริปต์ตัวช่วย
เนื่องจากการรันคำสั่งการติดตั้งสำหรับแต่ละ lib น่ารำคาญและเกิดข้อผิดพลาดอย่างแน่นอนฉันจึงสร้างสคริปต์ยูทิลิตี้ที่ติดตั้ง jars ทั้งหมดจากlib
โฟลเดอร์ไปยังที่เก็บโครงการโดยอัตโนมัติในขณะที่แก้ไข metadata ทั้งหมด (groupId ,ifactId และอื่น ๆ ) ชื่อของไฟล์ สคริปต์นี้ยังพิมพ์ออกอ้างอิง XML pom
สำหรับคุณที่จะคัดลอกวางในของคุณ
รวมการพึ่งพาในแพ็คเกจเป้าหมายของคุณ
เมื่อคุณสร้างที่เก็บในโครงการแล้วคุณจะได้แก้ไขปัญหาในการกระจายการอ้างอิงของโครงการกับแหล่งที่มาของมัน แต่ตั้งแต่นั้นสิ่งประดิษฐ์เป้าหมายของโครงการของคุณจะขึ้นอยู่กับขวดที่ไม่ได้เผยแพร่ดังนั้นเมื่อคุณติดตั้ง ไปยังที่เก็บข้อมูลซึ่งจะมีการอ้างอิงที่ไม่สามารถแก้ไขได้
เพื่อเอาชนะปัญหานี้ฉันแนะนำให้รวมการพึ่งพาเหล่านี้ไว้ในแพ็คเกจเป้าหมายของคุณ คุณสามารถทำอะไรกับทั้งสภาปลั๊กอินหรือดีกว่าด้วยปลั๊กอิน OneJar เอกสารอย่างเป็นทางการของ OneJar นั้นง่ายต่อการเข้าใจ