นี่คือคำสั่ง clirr ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
clirr - ตรวจสอบความเข้ากันได้ของซอร์สและไบนารีของไลบรารี Java
เรื่องย่อ
คลิ -o โถเก่า -n นิวจาร์ [ตัวเลือก]
DESCRIPTION
Clirr เป็นเครื่องมือที่ตรวจสอบไลบรารี Java สำหรับไบนารีและความเข้ากันได้ของซอร์สกับรุ่นเก่า
เผยแพร่ โดยทั่วไปคุณให้ไฟล์ jar สองชุดและ Clirr ทิ้งรายการ
การเปลี่ยนแปลงใน API สาธารณะ
OPTIONS
-a, --show-all-ขอบเขต
แสดงคลาสส่วนตัวและแพ็คเกจ
-f, --output-ไฟล์
ชื่อไฟล์เอาต์พุต
-i, --รวม-pkg
รวมเฉพาะคลาสจากแพ็คเกจนี้และแพ็คเกจย่อย
-n, --เวอร์ชั่นใหม่
ไฟล์ jar ของเวอร์ชันใหม่
-ncp, --คลาสพาธใหม่
classpath บุคคลที่สามที่อ้างอิงโดย new-version
-o, --เวอร์ชั่นเก่า
ไฟล์ jar ของเวอร์ชันเก่า
-ต.ค, --orig-คลาสพาธ
classpath บุคคลที่สามที่อ้างอิงโดย old-version
-p, --show-pkg-ขอบเขต
แสดงคลาสขอบเขตแพ็คเกจ
-s, --สไตล์ [ข้อความ|xml]
สไตล์การส่งออก
ข้อความ
เมื่อ clirr สร้างข้อความข้อผิดพลาด คำเตือน หรือ INFO เกี่ยวกับการเปลี่ยนแปลงในขวดโหลที่กำลัง
เปรียบเทียบมีรหัสอ้างอิงข้อความที่เกี่ยวข้อง คู่มือนี้ประกอบด้วย an
คำอธิบายความหมายของข้อความนั้นซึ่งอาจประกอบด้วยข้อมูลที่ไม่สามารถ
ให้พอดีกับข้อความสรุปสั้นๆ
ข้อความจะถูกแบ่งออกเป็นสามระดับความรุนแรง: ข้อผิดพลาด คำเตือน และข้อมูล
ข้อผิดพลาดมาในสองรสชาติ:
ความล้มเหลวของเวลาเชื่อมโยง ซึ่งจะมีการส่งข้อยกเว้นทันทีที่คอมไพล์โค้ด
เทียบกับเวอร์ชันเก่าของคลาสและเวอร์ชันใหม่ของคลาสถูกโหลดลงใน
ลำดับชั้นของตัวโหลดคลาสเดียวกัน
ความล้มเหลวรันไทม์ ซึ่งจะมีข้อยกเว้นเมื่อคอมไพล์โค้ดกับ old
เวอร์ชันของคลาสพยายามเรียกใช้เมธอดในเวอร์ชันใหม่ของคลาส หรือ vice
ในทางกลับกัน
Clirr รายงาน "ข้อผิดพลาด" สำหรับกรณีที่เป็นไปได้ที่จะเกิดความล้มเหลวขณะทำงาน ไม่ว่า
หนึ่งที่เกิดขึ้นจริงขึ้นอยู่กับวิธีการเรียกห้องสมุดเช่นการเปลี่ยนแปลงรายงาน
เนื่องจากข้อผิดพลาดอาจใช้งานได้จริงเมื่อใช้ตราบใดที่รูปแบบการใช้ห้องสมุดทำ
ไม่เรียกสถานการณ์ความล้มเหลว
มีการออกคำเตือนสำหรับสถานการณ์ที่ไม่มีลิงก์หรือข้อยกเว้นรันไทม์เกิดขึ้น แต่
โดยที่แอปพลิเคชันอาจทำงานกะทันหันเนื่องจากการเปลี่ยนแปลงที่เกิดขึ้น
ข้อความข้อมูลให้ข้อมูลเกี่ยวกับคุณสมบัติใหม่แก่ผู้ใช้ที่ได้รับ
เพิ่มโดยไม่ทำลายความเข้ากันได้ย้อนหลัง แต่อย่างใด
เมื่อใช้ clirr เพื่อรายงานการเปลี่ยนแปลงรายการที่มีขอบเขตส่วนตัวหรือแพ็คเกจ สิ่งเหล่านี้
การเปลี่ยนแปลงจะถูกรายงานเป็นการเปลี่ยนแปลงระดับ INFO ไม่เคยระดับคำเตือนหรือข้อผิดพลาด นี้
อนุญาตให้ผู้ใช้ clirr สร้าง "รายงานการเปลี่ยนแปลง" ในระดับที่เหมาะสมสำหรับนักพัฒนา
โดยไม่มีการเปลี่ยนแปลงบางอย่างที่ทำเครื่องหมาย (ไม่เกี่ยวข้อง) ว่าเป็นความไม่ลงรอยกันของไบนารี
ไม่มีทางที่จะมีความเข้ากันไม่ได้ของไบนารีสำหรับการเปลี่ยนแปลงคลาสส่วนตัว เมธอด หรือ
ฟิลด์เนื่องจากการเข้าถึงนั้นสามารถเกิดขึ้นได้จากภายในคลาสเดียวกันเท่านั้น (เช่นการคอมไพล์เดียวกัน
หน่วย).
Clirr ไม่รายงานความไม่ลงรอยกันของไบนารี คำเตือนหรือข้อผิดพลาดสำหรับรายการที่อยู่ในขอบเขตของแพ็คเกจ
เนื่องจากแพ็คเกจ Java มีวัตถุประสงค์เพื่อเป็น "หน่วยการวางจำหน่าย" เช่นคลาสทั้งหมดภายใน
แพ็คเกจถูกคอมไพล์เข้าด้วยกัน (รับรองความเข้ากันได้) จากนั้นปล่อยเป็นหน่วย เพียง
เวลาที่ความไม่เข้ากันของขอบเขตแพ็คเกจอาจเป็นปัญหาเมื่อผู้ใช้a
ห้องสมุดเขียนคลาสของตัวเองโดยใช้การประกาศแพ็คเกจที่เป็นของภายนอก
ไลบรารี่ หรือเมื่อใช้ชุดย่อยของคลาสที่อัพเดต (เช่น คลาสเดียว) จากแพ็คเกจ
เพื่อแทนที่บางคลาสจากไลบรารีรุ่นก่อนหน้า ทั้งสองอย่าง
สถานการณ์ถือเป็นแนวทางปฏิบัติที่แย่มากตามแบบแผนการเขียนโปรแกรม Java
ในส่วนต่อไปนี้ คำว่า "เก่า" ใช้เพื่ออ้างถึงคลาส อินเตอร์เฟส เมธอด
หรือฟิลด์จากชุดของไหที่แสดงถึงเวอร์ชันเก่า/ก่อนหน้า/เดิม/พื้นฐาน
ของห้องสมุดที่กำลังตรวจสอบ คำว่า "ใหม่" ใช้เพื่ออ้างถึงคลาส ส่วนต่อประสาน
เมธอดหรือฟิลด์จากชุดของไหซึ่งแสดงถึงเวอร์ชันใหม่/ปัจจุบัน/ล่าสุดของ
กำลังตรวจสอบห้องสมุด
ในส่วนต่อไปนี้ คำว่า "ประเภท" ใช้เพื่ออ้างถึงบางสิ่งที่อาจ
ไม่ว่าจะเป็นคลาสหรืออินเทอร์เฟซ
1000 - เพิ่มขึ้น ความชัดเจน of ชั้น
ความรุนแรง: INFO
มีประเภทที่ระบุอยู่ในทั้งสองเวอร์ชัน แต่ตัวระบุการเข้าถึงที่ประกาศมี
เปลี่ยนเพื่อผ่อนคลายข้อ จำกัด เกี่ยวกับสิ่งที่รหัสอื่นสามารถเข้าถึงได้
ประเภทระดับบนสุด (เช่นประเภทที่ไม่ซ้อนกันภายในคลาสอื่น) อาจมีเพียง
การเข้าถึง "แพ็คเกจ" หรือ "สาธารณะ" ประเภทที่ซ้อนกันสามารถรับได้กับสี่
ค่าการช่วยสำหรับการเข้าถึงที่พร้อมใช้งาน
ไม่ว่าอ็อบเจ็กต์จะอยู่ระดับบนสุดหรือซ้อนกัน การเปลี่ยนแปลงในการช่วยสำหรับการเข้าถึง
จากซ้ายไปขวาของลำดับส่วนตัว -> แพ็คเกจ -> ป้องกัน -> สาธารณะเสมอ
ตรวจสอบให้แน่ใจว่ารหัสทั้งหมดที่เคยเข้าถึงประเภทนั้นยังคงสามารถเข้าถึงได้
พิมพ์. ดังนั้นการเปลี่ยนแปลงดังกล่าวจึงเข้ากันได้กับไบนารีและซอร์สโค้ดเสมอ
โปรดทราบว่าการประกาศ "มีการป้องกัน" ให้การเข้าถึงรหัสทั้งสองที่ได้มาจาก
พิมพ์และรหัสภายในแพ็คเกจเดียวกันเช่นการเข้าถึง "ที่มีการป้องกัน" ก็หมายถึง
การเข้าถึงแพ็คเกจ
1001 - ความต้องการทางเพศ ความชัดเจน of ชั้น
ความรุนแรง: ERROR
มีประเภทที่ระบุอยู่ในทั้งสองเวอร์ชัน แต่ตัวระบุการเข้าถึงที่ประกาศมี
เปลี่ยนเพื่อกระชับข้อจำกัดเกี่ยวกับสิ่งที่รหัสอื่นอาจเข้าถึงได้
ประเภทระดับบนสุด (เช่นประเภทที่ไม่ซ้อนกันภายในคลาสอื่น) อาจมีเพียง
การเข้าถึง "แพ็คเกจ" หรือ "สาธารณะ" ประเภทที่ซ้อนกันสามารถรับได้กับสี่
ค่าการช่วยสำหรับการเข้าถึงที่พร้อมใช้งาน
ไม่ว่าประเภทจะอยู่ในระดับบนสุดหรือซ้อนกัน การเปลี่ยนแปลงในการช่วยสำหรับการเข้าถึง
จากซ้ายไปขวาของลำดับ public->protected->package->private may cause
รหัสที่มีอยู่ซึ่งก่อนหน้านี้สามารถเข้าถึงประเภทที่ไม่สามารถทำได้อีกต่อไป
ส่วนที่ 13.4.3 ของข้อกำหนดภาษา Java ระบุไว้อย่างชัดเจนว่า an
IllegalAccessError ควรเกิดขึ้นหากไบนารีที่มีอยู่ก่อนพยายามเข้าถึง type
เมื่อการช่วยสำหรับการเข้าถึงประเภทถูกเปลี่ยนเป็นสิ่งที่จะทำให้
ข้อผิดพลาดในการคอมไพล์ อย่างไรก็ตามสิ่งนี้ดูเหมือนจะไม่มีผลบังคับใช้ในทางปฏิบัติที่
น้อยที่สุดใน JVM ปัจจุบัน อย่างไรก็ตาม นี่ควรจะเป็นข้อผิดพลาด ดังนั้น clirr รายงาน
การเปลี่ยนแปลงนี้เป็นข้อผิดพลาดที่เข้ากันได้กับไบนารี
2000 - เปลี่ยน เริ่มต้น ชั้น ไปยัง อินเตอร์เฟซ
ความรุนแรง: ERROR
คลาสที่ระบุได้กลายเป็นส่วนต่อประสานในเวอร์ชันใหม่ การเปลี่ยนแปลงนี้คือ
ความไม่ลงรอยกันของไบนารีและซอร์สโค้ดเสมอด้วยเหตุผลที่ชัดเจน
2001 - เปลี่ยน เริ่มต้น อินเตอร์เฟซ ไปยัง ชั้น
ความรุนแรง: ERROR
อินเทอร์เฟซที่ระบุได้กลายเป็นคลาสในเวอร์ชันใหม่ การเปลี่ยนแปลงนี้คือ
ความไม่ลงรอยกันของไบนารีและซอร์สโค้ดเสมอด้วยเหตุผลที่ชัดเจน
3001 - ลบออก สุดท้าย เปลี่ยนแปลง เริ่มต้น ชั้น
ความรุนแรง: INFO
คลาสที่ระบุได้รับการประกาศเป็นครั้งสุดท้ายในเวอร์ชันเก่า แต่จะไม่สิ้นสุดอีกต่อไป
ในเวอร์ชันใหม่
3002 - ที่เพิ่ม สุดท้าย เปลี่ยนแปลง ไปยัง มีประสิทธิภาพ สุดท้าย ชั้น
ความรุนแรง: INFO
คลาสที่ระบุไม่ได้ประกาศเป็นครั้งสุดท้ายในเวอร์ชันเก่า แต่ตอนนี้ประกาศแล้ว
สุดท้าย. โดยปกติ นี่จะเป็นสิ่งที่เข้ากันไม่ได้เพราะว่ามาจากที่มีอยู่ก่อนแล้ว
คลาสจะใช้ไม่ได้อีกต่อไปเมื่อใช้กับเวอร์ชันใหม่ของคลาสนี้
อย่างไรก็ตาม ในกรณีนี้ เวอร์ชันคลาสเก่าไม่มีตัวสร้างสาธารณะหรือตัวสร้างที่ได้รับการป้องกัน
ดังนั้นจึงเป็นไปไม่ได้ที่คลาสที่ได้รับมาจะมีอยู่แม้กระทั่งในเวอร์ชันเก่าของ
ห้องสมุด. การเปลี่ยนคลาสดังกล่าวเป็นขั้นสุดท้ายจึงไม่สามารถทำลายที่มีอยู่ได้
รหัส.
3003 - ที่เพิ่ม สุดท้าย เปลี่ยนแปลง ไปยัง ชั้น
ความรุนแรง: ERROR
คลาสที่ระบุไม่ได้ประกาศเป็นครั้งสุดท้ายในเวอร์ชันเก่า แต่ตอนนี้ประกาศแล้ว
สุดท้าย. คลาสที่มีอยู่ก่อนซึ่งถูกประกาศเป็นคลาสย่อยของคลาสนี้
จึงไม่มีผลกับไลบรารีเวอร์ชันใหม่
VerifyError ถูกส่งโดย classloader เมื่อมีการพยายามโหลด a
คลาสย่อยของคลาสสุดท้าย
โปรดทราบว่าคลาส Y ถูกโหลดโดย classloader มาตรฐานเฉพาะเมื่อ first
พยายามสร้างอินสแตนซ์ของ Y หรืออ้างอิง Class . โดยตรง
วัตถุสำหรับคลาส Y หากคลาส X อื่นมีคลาส Y เป็นสมาชิกที่ประกาศหรือเป็น a
พารามิเตอร์บางวิธี จากนั้นการโหลดคลาส X จะไม่ทำให้โหลดคลาส Y
3004 - ลบออก นามธรรม เปลี่ยนแปลง เริ่มต้น ชั้น
ความรุนแรง: INFO
เวอร์ชันเก่าของคลาสนี้ได้รับการประกาศให้เป็นคลาสนามธรรม รุ่นใหม่
ไม่เป็นนามธรรม ทำให้ผู้ใช้สามารถสร้างอินสแตนซ์ของคลาสได้
3005 - ที่เพิ่ม นามธรรม เปลี่ยนแปลง ไปยัง ชั้น
ความรุนแรง: ERROR
เวอร์ชันเก่าของคลาสนี้ไม่ได้รับการประกาศให้เป็นนามธรรม เวอร์ชันใหม่คือ
บทคัดย่อ. รหัสที่มีอยู่ก่อนซึ่งสร้างอินสแตนซ์ของคลาสนี้ไม่มีอีกต่อไป
ใช้ได้กับเวอร์ชันใหม่
4000 - ที่เพิ่ม อินเตอร์เฟซ ไปยัง ชุด of การดำเนินการ อินเตอร์เฟซ
ความรุนแรง: INFO
เวอร์ชันใหม่นี้ใช้อินเทอร์เฟซเพิ่มเติม นี้ไม่ได้
ทำให้โค้ดที่มีอยู่ใช้ไม่ได้ (ซอร์สหรือไบนารี) และเป็นรหัสที่สมบูรณ์
การเปลี่ยนแปลงที่เข้ากันได้ย้อนหลัง
โปรดทราบว่าข้อความนี้สามารถรายงานได้โดยไม่มีการเปลี่ยนแปลงใดๆ เกิดขึ้นใน
ประเภทที่ระบุ; การเปลี่ยนชุดของอินเทอร์เฟซที่รองรับโดยประเภทจะทำให้
ข้อความนี้จะถูกรายงานสำหรับทายาททุกคนในประเภทนั้น
4001 - ลบออก อินเตอร์เฟซ เริ่มต้น ชุด of การดำเนินการ อินเตอร์เฟซ
ความรุนแรง: ERROR
เวอร์ชันเก่าของประเภทนี้ประกาศว่าใช้อินเทอร์เฟซที่
คลาสหรืออินเทอร์เฟซใหม่ไม่ได้ รหัสที่มีอยู่ซึ่งแคสต์โดยชัดแจ้งหรือโดยปริยาย
ออบเจ็กต์ประเภทนี้ไปยังอินเทอร์เฟซที่หายไปในขณะนี้ใช้ไม่ได้อีกต่อไป
โปรดทราบว่าข้อความนี้สามารถรายงานได้โดยไม่มีการเปลี่ยนแปลงใดๆ เกิดขึ้นใน
ประเภทที่ระบุ; การเปลี่ยนชุดของอินเทอร์เฟซที่รองรับโดยประเภทจะทำให้
ข้อความนี้จะถูกรายงานสำหรับทายาททุกคนในประเภทนั้น
5000 - ที่เพิ่ม ชั้น ไปยัง ชุด of ซุปเปอร์คลาส
ความรุนแรง: ข้อมูลหรือคำเตือน
เวอร์ชันใหม่ของคลาสมีคลาสในลำดับชั้นการสืบทอดซึ่งตัวเก่า
เวอร์ชันไม่ได้เพราะว่าพาเรนต์โดยตรงเป็นคลาสอื่นหรือ
เพราะหนึ่งในคลาสหลักได้เปลี่ยนลำดับชั้นการสืบทอด
หากคลาสที่ระบุมี java.lang.Throwable เป็นบรรพบุรุษ การเปลี่ยนแปลงนี้คือ
รายงานเป็นคำเตือนเนื่องจากการเปลี่ยนแปลงคลาสนี้อาจเปลี่ยนข้อยกเว้นที่จับได้
พฤติกรรมของโปรแกรมที่ใช้คลาสนี้
โปรดทราบว่าข้อความนี้สามารถรายงานได้โดยไม่มีการเปลี่ยนแปลงใดๆ เกิดขึ้นใน
คลาสที่ระบุ; การเปลี่ยนแปลงชุดของ superclasses ของคลาสบรรพบุรุษ will
ทำให้ข้อความนี้ถูกรายงานสำหรับทายาททุกคลาส
5001 - ลบออก ชั้น เริ่มต้น ชุด of ซุปเปอร์คลาส
ความรุนแรง: ERROR
รุ่นเก่าของคลาสนี้มีคลาสในลำดับชั้นการสืบทอดซึ่ง
เวอร์ชันใหม่ไม่ได้เพราะตอนนี้พาเรนต์โดยตรงเป็นคลาสอื่นหรือ
เพราะหนึ่งในคลาสหลักได้เปลี่ยนลำดับชั้นการสืบทอด
รหัสที่มีอยู่ซึ่งส่งวัตถุประเภทนี้ไปยังตอนนี้โดยชัดแจ้งหรือโดยปริยาย
ประเภทคลาสที่ขาดหายไปจะใช้ไม่ได้อีกต่อไป
โปรดทราบว่าข้อความนี้สามารถรายงานได้โดยไม่มีการเปลี่ยนแปลงใดๆ เกิดขึ้นใน
คลาสที่ระบุ; การเปลี่ยนแปลงชุดของ superclasses ของคลาสบรรพบุรุษ will
ทำให้ข้อความนี้ถูกรายงานสำหรับคลาสที่สืบทอดมาทุกคลาส
สังเกตด้วยว่าถ้าคลาสนี้มี Throwable ในบรรพบุรุษแล้ว class
การเปลี่ยนแปลงลำดับชั้นยังสามารถทำให้เกิดการเปลี่ยนแปลงในพฤติกรรมจับข้อยกเว้นของ
โปรแกรมที่ใช้คลาสนี้
6000 - ที่เพิ่ม สนาม
ความรุนแรง: INFO
คลาสใหม่มีสมาชิกสแตติกหรืออินสแตนซ์เพิ่มเติม การเปลี่ยนแปลงนี้คือ
เข้ากันได้อย่างสมบูรณ์ย้อนหลัง
6001 - ลบออก สนาม
ความรุนแรง: ERROR
คลาสใหม่ได้ลบฟิลด์ที่มีอยู่ในเวอร์ชันเก่า รหัสที่มีอยู่ก่อน
ซึ่งเข้าถึงฟิลด์นั้นโดยตรงจะไม่สามารถใช้งานได้อีกต่อไป
6002 - ความคุ้มค่า of สนาม ไม่ อีกต่อไป a เวลารวบรวม คงที่
ความรุนแรง: คำเตือน
รหัสที่รวบรวมกับรุ่นเก่าของคลาสได้รับอนุญาตให้ "อินไลน์" the
ค่าของฟิลด์นี้เพราะเป็นค่าคงที่เวลาคอมไพล์ ดังนั้น ที่มีอยู่
รหัสไบนารีจะยังคงใช้ค่าเดิมของฟิลด์นี้ แทน new
ค่า (ซึ่งไม่สามารถแทรกได้)
6003 - ความคุ้มค่า of เวลารวบรวม คงที่ มี การเปลี่ยนแปลง
ความรุนแรง: คำเตือน
รหัสที่รวบรวมกับรุ่นเก่าของคลาสได้รับอนุญาตให้ "อินไลน์" the
ค่าของฟิลด์นี้เพราะเป็นค่าคงที่เวลาคอมไพล์ ดังนั้น ที่มีอยู่
รหัสไบนารีจะยังคงใช้ค่าเดิมของฟิลด์นี้ แทน new
มูลค่า
6004 - สนาม ชนิด การเปลี่ยนแปลง
ความรุนแรง: ERROR
ประเภทที่เกี่ยวข้องกับสมาชิกสแตติกหรืออินสแตนซ์ที่ระบุของที่ระบุ
ชั้นเรียนมีการเปลี่ยนแปลง รหัสที่มีอยู่ก่อนซึ่งเข้าถึงช่องนั้นโดยตรงอาจไม่มี
ถูกต้องอีกต่อไป ดังนั้นนี่คือการเปลี่ยนแปลงที่เข้ากันไม่ได้
6005 - สนาม ตอนนี้ รอบชิงชนะเลิศ
ความรุนแรง: INFO
สนามนี้เคยเป็นที่สิ้นสุด และไม่เป็นที่สิ้นสุดอีกต่อไป ซึ่งหมายความว่าสนาม
ค่านี้สามารถแก้ไขได้ตลอดอายุของคลาสหรืออินสแตนซ์
ค่าในฟิลด์ก่อนหน้านี้สามารถ "inline" ในคลาสอื่นได้หรือไม่คือ an
ปัญหาได้รับการแก้ไขโดยข้อความ 6002 และ 6003 ไม่ใช่ข้อความนี้
6006 - สนาม ตอนนี้ สุดท้าย
ความรุนแรง: ERROR
แก้ไขฟิลด์นี้ไม่ได้อีกต่อไปในช่วงอายุของคลาสหรืออินสแตนซ์
รหัสที่แก้ไขก่อนหน้านี้ฟิลด์นี้จึงใช้ไม่ได้อีกต่อไป
6007 - สนาม ตอนนี้ ไม่คงที่
ความรุนแรง: ERROR
ฟิลด์นี้เป็นตัวแปรอินสแตนซ์แทนที่จะเป็นตัวแปรคลาส รหัสซึ่ง
ก่อนหน้านี้เข้าถึงฟิลด์นี้ผ่านคลาสแทนที่จะเป็นอินสแตนซ์ของคลาส
จะใช้ไม่ได้อีกต่อไป
6008 - สนาม ตอนนี้ คงที่
ความรุนแรง: ERROR
ฟิลด์นี้เป็นตัวแปรคลาสแทนที่จะเป็นตัวแปรอินสแตนซ์
ด้วยเหตุผลบางอย่าง (น่าจะเป็นปัญหาการใช้งานภายใน) Java standard
ประกาศว่าการเปลี่ยนแปลงนี้เข้ากันไม่ได้กับไบนารีและว่า an
IncompatibleClassChangeError จะถูกส่งออกไปหากโค้ดที่คอมไพล์กับ "เก่า"
เวอร์ชันของคลาสใช้ร่วมกับเวอร์ชัน "ใหม่" ซึ่งปัจจุบันเป็นฟิลด์
คงที่.
เนื่องจากซอร์สโค้ดได้รับอนุญาตให้เข้าถึงตัวแปรคลาสผ่านอินสแตนซ์ของสิ่งนั้น
คลาสนี้คาดว่าจะเป็นการเปลี่ยนแปลงที่เข้ากันได้กับซอร์สโค้ด อย่างไรก็ตามในปัจจุบัน
CLIRR รายงานสิ่งนี้ว่าเป็นข้อผิดพลาดสำหรับความเข้ากันได้ของซอร์สโค้ดด้วย
6009 - สนาม เพิ่มเติม ที่สามารถเข้าถึงได้
ความรุนแรง: INFO
ในเวอร์ชันใหม่ ฟิลด์ที่ระบุสามารถเข้าถึงโค้ดได้มากกว่าเดิม
ก่อนหน้านี้
6010 - สนาม น้อยกว่า ที่สามารถเข้าถึงได้
ความรุนแรง: ERROR
ในเวอร์ชันใหม่ ฟิลด์ที่ระบุสามารถเข้าถึงโค้ดได้น้อยกว่าที่เป็นอยู่
ก่อนหน้านี้. ดังนั้นรหัสที่มีอยู่อาจใช้ไม่ได้อีกต่อไป
6011 - ลบออก ค่าคงที่ สนาม
ความรุนแรงแบบไบนารี: คำเตือน
ความรุนแรงของแหล่งที่มา: ERROR
คลาสใหม่ได้ลบฟิลด์ที่มีอยู่ในเวอร์ชันเก่า แหล่งที่มาที่มีอยู่ก่อน
รหัสที่เข้าถึงช่องนั้นโดยตรงจะใช้ไม่ได้อีกต่อไป
อย่างไรก็ตาม ก่อนหน้านี้ ฟิลด์นี้เป็นฟิลด์สุดท้ายและเริ่มต้นด้วยค่าคงที่
ดังนั้นโค้ดที่คอมไพล์เทียบกับเวอร์ชันก่อนหน้าของคลาสจะมี inline
ค่าคงที่นี้และจะทำงานต่อไปโดยใช้ค่าก่อนหน้าของฟิลด์นี้ NS
มีการออกคำเตือนเนื่องจากพฤติกรรมนี้มักไม่เป็นที่ต้องการ อย่างไรก็ตามมันไม่ใช่
ความไม่ลงรอยกันของไบนารี
7000 - วิธี ตอนนี้ in ซุปเปอร์คลาส
ความรุนแรง: INFO
คลาสเก่ามีเมธอดชื่อ X คลาสใหม่ไม่มีเมธอดนี้อีกต่อไป แต่มี a
คลาสพาเรนต์กำหนดวิธีการนี้ ดังนั้นจึงไม่มีไบนารีหรือซอร์สที่เข้ากันไม่ได้
ที่เกิดขึ้น
โปรดทราบว่าการเปลี่ยนแปลงนี้อาจส่งผลต่อการบังคับให้คลาสใหม่กลายเป็น
'บทคัดย่อ'. หากเป็นกรณีนี้ การเปลี่ยนแปลงนี้จะถูกรายงานแยกต่างหาก
7001 - วิธี ตอนนี้ in อินเตอร์เฟซ
ความรุนแรง: INFO
คลาสหรืออินเตอร์เฟสเก่าก่อนหน้านี้มีเมธอดชื่อ X คลาสใหม่หรือ
อินเทอร์เฟซไม่มีวิธีนี้อีกต่อไป แต่อินเทอร์เฟซหลักกำหนดสิ่งนี้
เมธอด จึงไม่เกิดความไม่ลงรอยกันของไบนารีหรือซอร์ส
โปรดทราบว่าการเปลี่ยนแปลงนี้อาจส่งผลต่อการบังคับให้คลาสใหม่กลายเป็น
'บทคัดย่อ'. หากเป็นกรณีนี้ การเปลี่ยนแปลงนี้จะถูกรายงานแยกต่างหาก
7002 - วิธี ลบออก
ความรุนแรง: ERROR
คลาสหรืออินเตอร์เฟสเก่ามีเมธอดชื่อ X คลาสใหม่หรืออินเตอร์เฟส no
มีเมธอดนี้อีกต่อไป และเมธอดนี้ไม่ได้กำหนดไว้ในคลาสพาเรนต์ใดๆ หรือ
อินเตอร์เฟซ.
ข้อผิดพลาดเกิดขึ้นจริงขณะรันไทม์สำหรับการเปลี่ยนแปลงนี้หรือไม่นั้นขึ้นอยู่กับการใช้งาน
รูปแบบ คลาสที่แก้ไขสามารถใช้กับรหัสที่มีอยู่ได้ตราบใดที่
รหัสที่มีอยู่ไม่พยายามเรียกวิธีการที่ถูกลบ หากเรียกหาคนหาย
เมธอดถูกสร้างขึ้น จากนั้นข้อยกเว้น NoSuchMethodError จะถูกสร้างขึ้นเมื่อเมธอด
การเรียกร้องเกิดขึ้น
7003 - วิธี โอเวอร์ไซด์ ลบออก
ความรุนแรง: INFO
เมธอดที่ระบุในคลาสหรืออินเตอร์เฟสเก่ากำลังแทนที่การสืบทอด
คำนิยาม. คลาสหรืออินเทอร์เฟซใหม่ไม่มีวิธีการนี้อย่างชัดเจนอีกต่อไป
ประกาศไว้ แต่ยังคงสืบทอดคำจำกัดความดังนั้นจึงไม่มีไบนารี
ความไม่ลงรอยกัน 7004 - เปลี่ยนจำนวนอาร์กิวเมนต์ของเมธอด
ความรุนแรง: ERROR
วิธีการที่ระบุมีการเพิ่มหรือลบอาร์กิวเมนต์ ซึ่งหมายความว่ารหัสซึ่ง
ที่เรียกใช้ก่อนหน้านี้จะไม่เรียกใช้วิธีการเดียวกันอีกต่อไป
หากมีการกำหนดวิธีการสืบทอดกับต้นแบบเก่าแล้วจะไม่มี
ความไม่ลงรอยกันของไบนารี โค้ดที่คอมไพล์เทียบกับเวอร์ชันเก่าของ this
ตอนนี้คลาสจะเรียกใช้การใช้งานที่สืบทอดมา ในสถานการณ์นี้ clirr ควร
ส่งออกข้อความ INFO แทนที่จะเป็นข้อผิดพลาด อย่างไรก็ตาม ณ วันที่ปัจจุบัน clirr
ไม่ได้ตรวจสอบสถานการณ์นี้
หากไม่มีการกำหนดวิธีการสืบทอดกับต้นแบบเก่าแล้วการเปลี่ยนแปลง
คือความไม่ลงรอยกันของไบนารี
7005 - วิธี ข้อโต้แย้ง ประเภท การเปลี่ยนแปลง
ความรุนแรงแบบไบนารี: INFO หรือ ERROR
ความรุนแรงของแหล่งที่มา: ERROR
เมธอดที่ระบุมีประเภทของอาร์กิวเมนต์ตั้งแต่หนึ่งข้อขึ้นไปที่แก้ไข
ซึ่งหมายความว่าโค้ดที่คอมไพล์เทียบกับเวอร์ชันเก่าของคลาสจะไม่มีอีกต่อไป
เรียกใช้วิธีการเดียวกัน อย่างไรก็ตามซอร์สโค้ดเก่าเหมือนกันทุกประการเมื่อคอมไพล์
กับเวอร์ชันคลาสใหม่อาจเรียกใช้เมธอดนี้หากประเภทอาร์กิวเมนต์เป็น
เข้ากันได้กับงาน
หากมีการกำหนดวิธีการสืบทอดกับต้นแบบเก่าแล้วจะไม่มี
ความไม่ลงรอยกันของไบนารี โค้ดที่คอมไพล์เทียบกับเวอร์ชันเก่าของ this
ตอนนี้คลาสจะเรียกใช้การใช้งานที่สืบทอดมา ณ วันที่ปัจจุบัน clirr ไม่
ไม่ตรวจสอบสถานการณ์นี้
หากไม่มีการกำหนดวิธีการสืบทอดกับต้นแบบเก่าแล้วการเปลี่ยนแปลง
คือความไม่ลงรอยกันของไบนารี
หากเปลี่ยนประเภทพารามิเตอร์ทั้งหมดเปลี่ยนเป็น supertype ของก่อนหน้า
ประเภทที่ประกาศ หรือสำหรับประเภทพารามิเตอร์ดั้งเดิม หากเปลี่ยนเป็น "ใหญ่ขึ้น"
ทุกกรณี ดังนั้นโค้ดใหม่จึงเป็นซอร์สโค้ดที่เข้ากันได้กับตัวก่อนหน้า
ปล่อยแม้ว่ามันจะไม่รองรับไบนารี โปรดทราบว่าในสถานการณ์นี้
การคอมไพล์โค้ดใหม่ที่ใช้ไลบรารีอาจเปลี่ยนพฤติกรรมจากการเรียก an
สืบทอดวิธีการเรียกวิธีการในชั้นเรียนซึ่งมีความแตกต่างกันเล็กน้อย
ต้นแบบ ณ วันที่ปัจจุบัน clirr จะไม่ตรวจสอบสถานการณ์นี้
7006 - วิธี บริการรถส่ง ประเภท การเปลี่ยนแปลง
ความรุนแรงแบบไบนารี: ERROR
ความรุนแรงของแหล่งที่มา: INFO หรือ ERROR
เมธอดที่ระบุมีการเปลี่ยนแปลงประเภทการส่งคืนที่ประกาศ ไม่ว่าจะมีปัญหา
เกิดขึ้นจริงขณะรันไทม์เมื่อใช้โค้ดที่คอมไพล์กับเวอร์ชันเก่าของ this
ห้องสมุดขึ้นอยู่กับรูปแบบการใช้งาน รหัสเก่าอาจเรียกวิธีการอื่นในคลาสนี้
อย่างไรก็ตาม การพยายามเรียกใช้เมธอดที่เปลี่ยนประเภทการส่งคืนจะส่งผลให้
NoSuchMethodError ถูกส่งออกไปเมื่อมีการเรียกใช้เมธอดเนื่องจากการส่งคืน
type เป็นส่วนหนึ่งของ "method signature"
การเปลี่ยนแปลงนี้เข้ากันได้กับซอร์สโค้ดก็ต่อเมื่อประเภทการส่งคืนใหม่เป็น
กำหนดให้กับประเภทผลตอบแทนเก่า ซึ่งหมายความว่า:
หากประเภทการส่งคืนแบบเก่าเป็นประเภทดั้งเดิม ดังนั้นประเภทการส่งคืนใหม่จะต้องเป็น
แคบกว่าแบบเก่า
หากประเภทการส่งคืนแบบเก่าเป็นอินเทอร์เฟซ ดังนั้นประเภทการส่งคืนใหม่จะต้องเป็น a
คลาสหรืออินเทอร์เฟซที่ใช้ประเภทการส่งคืนแบบเก่า
หากประเภทการส่งคืนแบบเก่าเป็นคลาส ดังนั้นประเภทการส่งคืนใหม่จะต้องเป็นคลาสย่อย
ของประเภทที่ส่งคืนก่อนหน้านี้
Clirr ไม่ได้ตรวจสอบความเข้ากันได้ของซอร์สโค้ดสำหรับการเปลี่ยนแปลงในเมธอด
ประเภทการส่งคืน; ขณะนี้สิ่งเหล่านี้ถูกรายงานอย่างง่าย ๆ ว่าเป็นข้อผิดพลาด
7007 - วิธี มี รับ เลิก
ความรุนแรง: INFO
วิธีการที่ระบุได้รับการประกาศเป็น "เลิกใช้แล้ว" นี่คือ a . เสมอ
การเปลี่ยนแปลงที่เข้ากันได้กับไบนารีเช่นเดียวกับการเปลี่ยนแปลงที่เข้ากันได้กับซอร์สโค้ด
7008 - วิธี มี รับ ไม่สนับสนุน
ความรุนแรง: INFO
มีการประกาศวิธีการที่ระบุ "เลิกใช้แล้ว" ในเวอร์ชันก่อนหน้า แต่ไม่ใช่
เลิกใช้งานอีกต่อไปในรุ่นปัจจุบัน แม้ว่าจะผิดปกติเล็กน้อย นี่คือ
ได้รับอนุญาต การเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงที่เข้ากันได้กับไบนารีเสมอเช่นเดียวกับa
การเปลี่ยนแปลงที่เข้ากันได้กับซอร์สโค้ด
7009 - วิธี is ตอนนี้ น้อยกว่า ที่สามารถเข้าถึงได้
ความรุนแรง: ERROR
สิทธิ์การเข้าถึงที่เกี่ยวข้องกับวิธีการที่ระบุถูกทำให้รัดกุมถึง
อนุญาตให้ใช้รหัสผู้ใช้น้อยกว่าในการเข้าถึงวิธีการ
การเปลี่ยนแปลงนี้เป็นปัญหาความเข้ากันได้ของซอร์สโค้ดหรือไม่ขึ้นอยู่กับ
รูปแบบการใช้งาน.
การเปลี่ยนแปลงนี้ควรเป็นไบนารีที่เข้ากันไม่ได้ อย่างไรก็ตาม โปรดทราบว่า JVMs ปัจจุบันทำ
ไม่ตรวจสอบสิ่งนี้ รหัสที่คอมไพล์เทียบกับรุ่นก่อนหน้าของคลาส can
เรียกวิธีที่พวกเขาไม่มีสิทธิ์ในการเข้าถึงได้สำเร็จ
อย่างไรก็ตาม Java Language Specification ระบุว่านี่เป็นข้อผิดพลาด ดังนั้น
clirr รายงานการเปลี่ยนแปลงนี้เป็นความไม่ลงรอยกันของไบนารี
7010 - วิธี is ตอนนี้ เพิ่มเติม ที่สามารถเข้าถึงได้
ความรุนแรง: INFO
สิทธิ์การเข้าถึงที่เกี่ยวข้องกับวิธีการที่ระบุได้รับการคลายไปที่
อนุญาตให้รหัสผู้ใช้เพิ่มเติมในการเข้าถึงวิธีการ นี่เป็นไบนารีและซอร์สโค้ดเสมอ
การเปลี่ยนแปลงที่เข้ากันได้
7011 - วิธี ที่เพิ่ม
ความรุนแรง: INFO
เพิ่มวิธีการที่ไม่ใช่นามธรรมในคลาสที่ระบุ นี่คือ a . เสมอ
การเปลี่ยนแปลงที่เข้ากันได้กับไบนารี
นอกจากนี้ยังเป็นการเปลี่ยนแปลงที่เข้ากันได้กับซอร์สโค้ด
ถาม: หากวิธีการใหม่แทนที่วิธีการสืบทอด เวอร์ชันใดที่ใช้รหัส
รวบรวมกับเรียกห้องสมุดเก่า?
7012 - วิธี ที่เพิ่ม ไปยัง อินเตอร์เฟซ
ความรุนแรงแบบไบนารี: ERROR
ความรุนแรงของแหล่งที่มา: ERROR
มีการเพิ่มการประกาศเมธอดในอินเทอร์เฟซที่ระบุ นี้เสมอ
รายงานว่าเป็นข้อผิดพลาดที่เข้ากันได้กับไบนารี แต่ในทางปฏิบัติคลาสที่เปลี่ยนไปอาจ
ใช้สำเร็จด้วยโค้ดที่คอมไพล์กับอินเทอร์เฟซเก่าขึ้นอยู่กับ
รูปแบบการใช้งาน
รหัสเก่าซึ่งเรียกใช้เมธอดเมื่อคอมไพล์โค้ดกับโค้ดใหม่ (ขยาย)
อินเทอร์เฟซจะทำงานต่อไปโดยไม่มีปัญหา และรหัสเก่าที่ใช้
อินเทอร์เฟซรุ่นเก่าจะยังคงทำงานได้อย่างถูกต้องตราบเท่าที่ไม่
โค้ดพยายามเรียกใช้เมธอดที่เพิ่มเข้ามาใหม่กับอินสแตนซ์นั้น แต่
รหัสซึ่ง (ถูกต้อง) เรียกใช้หนึ่งในวิธีการใหม่ในอินเทอร์เฟซกับ an
วัตถุที่ใช้เฉพาะอินเทอร์เฟซรุ่นเก่าจะทำให้
AbstractMethodError จะถูกส่งออกไปในขณะที่พยายามเรียกใช้เมธอด
การเพิ่มเมธอดลงในอินเทอร์เฟซจะถูกรายงานเป็นข้อผิดพลาดเสมอ เนื่องจากคลาส
ที่ใช้อินเทอร์เฟซนั้นจะต้องได้รับการแก้ไขเพื่อใช้การประกาศ
วิธี
7013 - นามธรรม วิธี ที่เพิ่ม ไปยัง ชั้น
ความรุนแรงแบบไบนารี: ERROR
ความรุนแรงของแหล่งที่มา: ERROR
มีการเพิ่มการประกาศวิธีการที่เป็นนามธรรมในคลาสที่ระบุ นี่คือ
รายงานเสมอว่าเป็นข้อผิดพลาดที่เข้ากันได้กับไบนารี แต่ในทางปฏิบัติคลาสที่เปลี่ยนไป
อาจใช้สำเร็จด้วยโค้ดที่คอมไพล์กับคลาสเก่าขึ้นอยู่กับ
รูปแบบการใช้งาน
หากอินสแตนซ์ของอ็อบเจ็กต์ที่คอมไพล์กับคลาสเก่าถูกสร้างขึ้น แสดงว่า
วิธีการสามารถเรียกใช้ได้โดยไม่มีปัญหา แต่ถ้าวิธีนามธรรมที่เพิ่มใหม่คือ
เคยถูกเรียกใช้ จากนั้น AbstractMethodError จะถูกโยนในเวลาที่เมธอด
มีการพยายามเรียกใช้
7014 - วิธี ตอนนี้ สุดท้าย
ความรุนแรง: ERROR
วิธีการนี้ก่อนหน้านี้ไม่สิ้นสุด และปัจจุบันเป็นวิธีสุดท้าย คลาสย่อยของคลาสนี้
จะไม่คอมไพล์หรือรันอีกต่อไป
เมื่อcontainigคลาสเก่าวิธีนี้ถือเป็นที่สิ้นสุด (โดยชัดแจ้งหรือโดยการให้เท่านั้น
ตัวสร้างส่วนตัว) ดังนั้นคลาสย่อยจึงไม่มีอยู่ ปัจจุบัน Clirr ไม่ได้ตรวจสอบ
สำหรับสถานการณ์นี้ ดังนั้น สิ่งนี้จะทำให้เกิดสัญญาณเตือนที่ผิดพลาดในบางกรณี
7015 - วิธี ตอนนี้ รอบชิงชนะเลิศ
ความรุนแรง: INFO
วิธีการนี้เป็นขั้นตอนสุดท้าย และตอนนี้ยังไม่สิ้นสุด นี่คือ a . เสมอ
การเปลี่ยนแปลงที่เข้ากันได้กับไบนารี
8000 - ชั้น ที่เพิ่ม
ความรุนแรง: INFO
ไลบรารีเวอร์ชันใหม่มีคลาสที่ไม่มีอยู่ในเวอร์ชันเก่า
รุ่น
8001 - ชั้น ลบออก
ความรุนแรง: ERROR
ไลบรารีเวอร์ชันใหม่ไม่มีคลาสที่ระบุอีกต่อไป
ตัวอย่าง
ตรวจสอบความเข้ากันได้ของไลบรารีกับเวอร์ชันก่อนหน้า:
clirr -o foo-1.0.jar -n foo-2.0.jar
ตรวจสอบความเข้ากันได้ย้อนหลังของไลบรารีใหม่ขึ้นอยู่กับ Apache Commons Logging:
clirr -o foo-1.0.jar -n foo-2.0.jar -ocp /usr/share/java/commons-logging.jar -ncp
/usr/share/java/commons-logging.jar
หน้าแรก
http://clirr.sourceforge.net
พฤศจิกายน 2013 คลีร์ร์(1)
ใช้ clirr ออนไลน์โดยใช้บริการ onworks.net