คำเตือนเล็ก ๆ
แม้ว่าจะไม่ได้อธิบายว่าทำไมคนหนึ่งต้องการใช้ maven-shade-plugin (เนื่องจากคำตอบที่เลือกอธิบายได้ค่อนข้างดี) ฉันต้องการที่จะทราบว่าฉันมีปัญหากับมัน มันเปลี่ยน JAR (ตั้งแต่ที่มันทำ) และทำให้ซอฟต์แวร์ของฉันถดถอย
ดังนั้นแทนที่จะใช้สิ่งนี้ (หรือ maven-jarjar-plugin) ฉันใช้ไบนารีของ JarJar ซึ่งดูเหมือนว่าจะทำงานได้โดยไม่มีปัญหา
ฉันโพสต์ที่นี่โซลูชันของฉันเพราะฉันใช้เวลาพอสมควรในการหาทางออกที่เหมาะสม
ไฟล์ JAR ของ Downlaod JarJar
คุณสามารถดาวน์โหลด jar ได้จากที่นี่:
https://code.google.com/p/jarjar/
ในเมนูด้านซ้ายคุณจะมีลิงค์สำหรับดาวน์โหลด
วิธีใช้ JarJar เพื่อย้ายคลาสของ JAR จากแพ็คเกจหนึ่งไปอีกแพ็คเกจหนึ่ง
ในตัวอย่างนี้เราจะเปลี่ยนแพ็คเกจจาก "com.fasterxml.jackson" เป็น "io.kuku.dependencies.com.fasterxml.jackson" - JAR ต้นทางเรียกว่า "jackson-databind-2.6.4.jar" และแก้ไขใหม่ (เป้าหมาย) JAR เรียกว่า "kuku-jackson-databind-2.6.4.jar" - ไฟล์ "jarjar" JAR อยู่ในรุ่น 1.4
สร้างไฟล์ "rules.txt" เนื้อหาของไฟล์ควรเป็น (ดูช่วงเวลาก่อนตัวอักษร '@'): rule com.fasterxml.jackson. ** io.kuku.dependencies.com.fasterxml.jackson @ 1
รันคำสั่งต่อไปนี้: java -jar jarjar-1.4.jar กระบวนการ rules.txt jackson-databind-2.6.4.jar kuku-jackson-databind-2.6.4.jar
การติดตั้ง JAR ที่แก้ไขไปยังที่เก็บโลคัล
ในกรณีนี้ฉันกำลังติดตั้ง 3 ไฟล์ที่อยู่ในโฟลเดอร์ "c: \ my-jars \"
mvn ติดตั้ง: install-file -Dfile = C: \ my-jars \ kuku-jackson-annotations-2.6.4.jar -DgroupId = io.kuku.dependencies -DartifactId = kuku-jackson-annotations -Dversion = 2.6.4 - Dpackaging = ขวด
mvn ติดตั้ง: install-file -Dfile = C: \ my-jars \ kuku-jackson-core-2.6.4.jar -DgroupId = io.kuku.dependencies -DartifactId = kuku-jackson-core -Dversion = 2.6.4 - Dpackaging = ขวด
mvn ติดตั้ง: ไฟล์ติดตั้ง -Dfile = C: \ my-jars \ kuku-jackson-databind-2.6.4.jar -DgroupId = io.kuku.dependencies -DartifactId = kuku-jackson-annotations -Dversion = 2.6.4 - Dpackaging = ขวด
การใช้ JAR ที่แก้ไขใน pom ของโปรเจ็กต์
ในตัวอย่างนี้นี่คือองค์ประกอบ "การอ้างอิง" ใน pom โครงการ:
<dependencies>
<!-- ================================================== -->
<!-- kuku JARs -->
<!-- ================================================== -->
<dependency>
<groupId>io.kuku.dependencies</groupId>
<artifactId>kuku-jackson-annotations</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>io.kuku.dependencies</groupId>
<artifactId>kuku-jackson-core</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>io.kuku.dependencies</groupId>
<artifactId>kuku-jackson-databind</artifactId>
<version>2.6.4</version>
</dependency>
</dependencies>