Ini adalah perintah clirr yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
clirr - Periksa kompatibilitas sumber dan biner perpustakaan Java
RINGKASAN
klirr -o jar tua -n botol baru [Pilihan]
DESKRIPSI
Clirr adalah alat yang memeriksa perpustakaan Java untuk biner dan kompatibilitas sumber dengan yang lebih lama
rilis. Pada dasarnya Anda memberikannya dua set file jar dan Clirr mengeluarkan daftar
perubahan dalam API publik.
PILIHAN
-a, --tampilkan-semua-cakupan
tampilkan kelas privat dan paket
-f, --berkas keluaran
nama file keluaran
-i, --termasuk-pkg
hanya menyertakan kelas dari paket ini dan subpaketnya
-n, --versi baru
file jar versi baru
-ncp, --jalur kelas baru
classpath pihak ke-3 yang direferensikan oleh versi baru
-o, --versi lama
file jar versi lama
-okp, --jalur kelas asal
classpath pihak ke-3 yang direferensikan oleh versi lama
-p, --tunjukkan-lingkup pkg
tampilkan kelas cakupan paket
-s, --gaya [teks|xml]
gaya keluaran
PESAN
Ketika clirr menghasilkan pesan KESALAHAN, PERINGATAN, atau INFO tentang perubahan pada stoples yang
dibandingkan, ada kode referensi pesan terkait. Panduan ini berisi
penjelasan tentang arti pesan yang mungkin mengandung informasi yang tidak dapat
dipasang ke dalam ringkasan pesan singkat.
Pesan dipisahkan menjadi tiga tingkat keparahan: ERROR, WARNING, dan INFO.
Kesalahan datang dalam dua rasa:
Kegagalan tautan-waktu, di mana pengecualian akan dilemparkan segera setelah kode dikompilasi
terhadap versi lama dari kelas dan versi baru dari kelas dimuat ke
hierarki classloader yang sama.
Kegagalan run-time, di mana pengecualian dilemparkan ketika kode dikompilasi dengan yang lama
versi kelas mencoba memanggil metode pada versi baru kelas, atau sebaliknya
sebaliknya.
Clirr melaporkan "kesalahan" untuk kasus di mana dimungkinkan untuk mendapatkan kegagalan run-time. Apakah
yang benar-benar terjadi dapat bergantung pada cara perpustakaan dipanggil, yaitu perubahan yang dilaporkan
sebagai kesalahan sebenarnya dapat berfungsi ketika digunakan selama pola penggunaan perpustakaan melakukannya
tidak memicu situasi kegagalan.
Peringatan dikeluarkan untuk situasi di mana tidak ada tautan atau pengecualian runtime yang akan terjadi, tetapi
di mana aplikasi mungkin berperilaku tidak terduga karena perubahan yang telah terjadi.
Pesan informasi memberikan informasi kepada pengguna tentang fitur-fitur baru yang telah
ditambahkan tanpa merusak kompatibilitas dengan cara apa pun.
Saat menggunakan clirr untuk melaporkan perubahan pada item yang memiliki cakupan pribadi atau paket, ini:
perubahan selalu dilaporkan sebagai perubahan tingkat INFO, tidak pernah tingkat PERINGATAN atau KESALAHAN. Ini
memungkinkan pengguna clirr untuk menghasilkan "laporan perubahan" pada tingkat yang sesuai untuk pengembang
tanpa memiliki beberapa perubahan yang ditandai (secara tidak relevan) sebagai ketidakcocokan biner.
Tidak akan pernah ada ketidakcocokan biner untuk perubahan pada kelas privat, metode atau
bidang karena akses itu hanya dapat terjadi dari dalam kelas yang sama (yaitu kompilasi yang sama
satuan).
Clirr tidak melaporkan ketidakcocokan biner PERINGATAN atau KESALAHAN untuk item cakupan paket
baik, karena paket Java dimaksudkan untuk menjadi "unit rilis", yaitu semua kelas di dalam
sebuah paket dikompilasi bersama (memastikan kompatibilitas) kemudian dirilis sebagai satu unit. Satu-satunya
waktu ketidaksesuaian cakupan paket mungkin menjadi masalah adalah ketika pengguna a
perpustakaan menulis kelas mereka sendiri menggunakan deklarasi paket milik beberapa eksternal
perpustakaan, atau ketika subset dari kelas yang diperbarui (misalnya satu kelas) dari sebuah paket digunakan
untuk mengganti kelas tertentu dari rilis perpustakaan sebelumnya. Keduanya
situasi dianggap praktik yang sangat buruk oleh konvensi pemrograman Java.
Di bagian berikut, istilah "lama" digunakan untuk merujuk ke kelas, antarmuka, metode
atau bidang dari set toples yang mewakili versi lama/sebelumnya/asli/dasar
perpustakaan yang diperiksa. Istilah "baru" digunakan untuk merujuk ke kelas, antarmuka,
metode atau bidang dari kumpulan toples yang mewakili versi baru/saat ini/terbaru dari
perpustakaan yang diperiksa.
Pada bagian berikut, istilah "jenis" digunakan untuk merujuk pada sesuatu yang mungkin:
baik kelas atau antarmuka.
1000 - Peningkatan jarak penglihatan of kelas
Keparahan: INFO
Jenis yang ditentukan ada di kedua versi, tetapi penentu akses yang dideklarasikan memiliki
diubah untuk melonggarkan pembatasan pada kode lain yang dapat mengaksesnya.
Tipe tingkat atas (yaitu yang tidak bersarang di dalam kelas lain) hanya boleh memiliki
aksesibilitas "paket" atau "publik". Jenis bersarang dapat mengambil salah satu dari empat
nilai aksesibilitas yang tersedia.
Terlepas dari apakah objek tersebut tingkat atas atau bersarang, perubahan dalam aksesibilitas
dari kiri ke kanan urutan private->package->protected->public always
memastikan bahwa semua kode yang sebelumnya dapat mengakses jenis itu masih dapat mengaksesnya
Tipe. Oleh karena itu perubahan seperti itu selalu kompatibel dengan biner dan kode sumber.
Perhatikan bahwa deklarasi "dilindungi" menyediakan akses ke kedua kode yang berasal dari
ketik dan kode dalam paket yang sama, yaitu aksesibilitas "dilindungi" juga menyiratkan
aksesibilitas paket.
1001 - Penurunan jarak penglihatan of kelas
Tingkat keparahan: ERROR
Jenis yang ditentukan ada di kedua versi, tetapi penentu akses yang dideklarasikan memiliki
diubah untuk memperketat batasan pada kode apa yang dapat mengaksesnya.
Tipe tingkat atas (yaitu yang tidak bersarang di dalam kelas lain) hanya boleh memiliki
aksesibilitas "paket" atau "publik". Jenis bersarang dapat mengambil salah satu dari empat
nilai aksesibilitas yang tersedia.
Terlepas dari apakah jenisnya tingkat atas atau bertingkat, perubahan dalam aksesibilitas
dari kiri ke kanan urutan public->protected->package->private dapat menyebabkan
kode yang ada yang sebelumnya dapat mengakses tipe tersebut tidak lagi dapat melakukannya.
Bagian 13.4.3 dari Spesifikasi Bahasa Java menyatakan secara eksplisit bahwa sebuah
IllegalAccessError harus terjadi jika biner yang sudah ada mencoba mengakses tipe
ketika jenis aksesibilitas telah diubah menjadi sesuatu yang akan menyebabkan
kesalahan waktu kompilasi. Namun hal ini tampaknya tidak diterapkan dalam praktik, di
setidaknya di JVM saat ini. Namun demikian ini seharusnya merupakan kesalahan, dan begitulah laporan clirr
perubahan ini sebagai ERROR kompatibilitas biner.
2000 - Berubah dari kelas untuk antarmuka
Tingkat keparahan: ERROR
Kelas yang ditentukan telah menjadi antarmuka di versi baru. Perubahan ini adalah
selalu ketidakcocokan biner dan kode sumber, untuk alasan yang jelas.
2001 - Berubah dari antarmuka untuk kelas
Tingkat keparahan: ERROR
Antarmuka yang ditentukan telah menjadi kelas dalam versi baru. Perubahan ini adalah
selalu ketidakcocokan biner dan kode sumber, untuk alasan yang jelas.
3001 - Dihapus terakhir pengubah dari kelas
Keparahan: INFO
Kelas yang ditentukan dinyatakan final di versi lama, tetapi tidak lagi final
dalam versi baru.
3002 - Ditambahkan terakhir pengubah untuk efektif terakhir kelas
Keparahan: INFO
Kelas yang ditentukan tidak dinyatakan final di versi lama, tetapi sekarang dideklarasikan
terakhir. Biasanya, ini akan menjadi ketidakcocokan karena turunan yang sudah ada sebelumnya
kelas tidak lagi valid bila digunakan dengan versi baru dari kelas ini.
Namun dalam kasus ini versi kelas lama tidak memiliki konstruktor publik atau yang dilindungi,
jadi tidak mungkin ada kelas turunan bahkan untuk versi lama
Perpustakaan. Mengubah kelas seperti itu menjadi final karena itu tidak dapat merusak yang ada
kode.
3003 - Ditambahkan terakhir pengubah untuk kelas
Tingkat keparahan: ERROR
Kelas yang ditentukan tidak dinyatakan final di versi lama, tetapi sekarang dideklarasikan
terakhir. Setiap kelas yang sudah ada sebelumnya yang dideklarasikan sebagai subkelas dari kelas ini
karena itu tidak akan valid dengan versi perpustakaan yang baru.
VerifyError dilempar oleh classloader ketika upaya dilakukan untuk memuat a
subclass dari kelas akhir.
Perhatikan bahwa kelas Y dimuat oleh classloader standar hanya ketika yang pertama
upaya dilakukan untuk membuat turunan dari Y, atau untuk secara langsung merujuk Kelas
objek untuk kelas Y. Jika beberapa kelas X lain memiliki kelas Y sebagai anggota yang dideklarasikan, atau sebagai a
parameter ke beberapa metode, maka memuat kelas X tidak menyebabkan kelas Y dimuat.
3004 - Dihapus abstrak pengubah dari kelas
Keparahan: INFO
Versi lama dari kelas ini dinyatakan sebagai kelas abstrak. Versi baru
tidak abstrak, memungkinkan pengguna untuk membuat instance kelas.
3005 - Ditambahkan abstrak pengubah untuk kelas
Tingkat keparahan: ERROR
Versi lama dari kelas ini tidak dinyatakan sebagai abstrak. Versi baru adalah
abstrak. Kode yang sudah ada sebelumnya yang membuat instance kelas ini tidak lagi
berlaku dengan versi baru.
4000 - Ditambahkan antarmuka untuk itu set of diimplementasikan interface
Keparahan: INFO
Versi baru dari tipe ini sekarang mengimplementasikan antarmuka tambahan. Ini tidak
membatalkan kode yang ada (sumber atau biner), dan sepenuhnya
perubahan yang kompatibel ke belakang.
Perhatikan bahwa pesan ini dapat dilaporkan tanpa perubahan apa pun yang terjadi di
jenis yang ditentukan; perubahan pada set antarmuka yang didukung oleh suatu tipe akan menyebabkan
pesan ini akan dilaporkan untuk setiap keturunan dari jenis itu.
4001 - Dihapus antarmuka dari itu set of diimplementasikan interface
Tingkat keparahan: ERROR
Versi lama dari jenis ini menyatakan bahwa ia mengimplementasikan antarmuka yang
kelas atau antarmuka baru tidak. Kode yang ada yang secara eksplisit atau implisit dilemparkan
objek jenis ini ke antarmuka yang sekarang hilang tidak lagi valid.
Perhatikan bahwa pesan ini dapat dilaporkan tanpa perubahan apa pun yang terjadi di
jenis yang ditentukan; perubahan pada set antarmuka yang didukung oleh suatu tipe akan menyebabkan
pesan ini akan dilaporkan untuk setiap keturunan dari jenis itu.
5000 - Ditambahkan kelas untuk itu set of kelas super
Keparahan: INFO atau PERINGATAN
Versi baru dari kelas memiliki kelas dalam hierarki pewarisannya yang lama
versi tidak, baik karena induk langsungnya sekarang adalah kelas yang berbeda, atau
karena salah satu kelas induknya telah mengubah hierarki pewarisannya.
Jika kelas yang ditentukan memiliki java.lang.Throwable sebagai leluhur, maka perubahan ini adalah
dilaporkan sebagai PERINGATAN, karena perubahan kelas ini dapat mengubah penangkapan pengecualian
perilaku program yang menggunakan kelas ini.
Perhatikan bahwa pesan ini dapat dilaporkan tanpa perubahan apa pun yang terjadi di
kelas tertentu; perubahan pada himpunan superclass dari kelas leluhur akan
menyebabkan pesan ini dilaporkan untuk setiap kelas turunan.
5001 - Dihapus kelas dari itu set of kelas super
Tingkat keparahan: ERROR
Versi lama dari kelas ini memiliki kelas dalam hierarki pewarisannya yang
versi baru tidak, baik karena induk langsungnya sekarang adalah kelas yang berbeda, atau
karena salah satu kelas induknya telah mengubah hierarki pewarisannya.
Kode yang ada yang secara eksplisit atau implisit mentransmisikan objek jenis ini ke saat ini
jenis kelas yang hilang tidak lagi valid.
Perhatikan bahwa pesan ini dapat dilaporkan tanpa perubahan apa pun yang terjadi di
kelas tertentu; perubahan pada himpunan superclass dari kelas leluhur akan
menyebabkan pesan ini dilaporkan untuk setiap kelas turunan.
Perhatikan juga bahwa jika kelas ini memiliki Throwable dalam leluhurnya, maka kelas
perubahan hierarki juga dapat menyebabkan perubahan dalam perilaku menangkap pengecualian dari
program yang menggunakan kelas ini.
6000 - Ditambahkan bidang
Keparahan: INFO
Kelas baru memiliki anggota statis atau instance tambahan. Perubahan ini adalah
sepenuhnya kompatibel ke belakang.
6001 - Dihapus bidang
Tingkat keparahan: ERROR
Kelas baru telah menghapus bidang yang ada di versi lama. Kode yang sudah ada sebelumnya
yang secara langsung mengakses bidang itu tidak akan valid lagi.
6002 - Nilai of bidang tidak lagi a kompilasi-waktu konstan
Keparahan: PERINGATAN
Kode yang dikompilasi terhadap versi lama kelas diizinkan untuk "menyejajarkan" dengan
nilai bidang ini karena merupakan konstanta waktu kompilasi. Oleh karena itu, eksis
kode biner akan terus menggunakan nilai lama bidang ini, bukan yang baru
nilai (yang tidak dapat digarisbawahi).
6003 - Nilai of kompilasi-waktu konstan memiliki berubah
Keparahan: PERINGATAN
Kode yang dikompilasi terhadap versi lama kelas diizinkan untuk "menyejajarkan" dengan
nilai bidang ini karena merupakan konstanta waktu kompilasi. Oleh karena itu, eksis
kode biner akan terus menggunakan nilai lama bidang ini, bukan yang baru
nilai.
6004 - Bidang mengetik berubah
Tingkat keparahan: ERROR
Jenis yang terkait dengan anggota statis atau instance tertentu dari yang ditentukan
kelas telah berubah. Kode yang sudah ada sebelumnya yang secara langsung mengakses bidang itu mungkin tidak
lagi berlaku, dan karena itu ini adalah perubahan yang tidak kompatibel.
6005 - Bidang sekarang non-final
Keparahan: INFO
Bidang itu sebelumnya final, dan tidak lagi final. Ini berarti bahwa lapangan
nilai sekarang dapat dimodifikasi selama masa kelas atau instance.
Apakah suatu nilai dalam suatu bidang sebelumnya dapat "digarisbawahi" ke dalam kelas lain adalah suatu
masalah yang ditangani oleh pesan 6002 dan 6003, bukan pesan ini.
6006 - Bidang sekarang terakhir
Tingkat keparahan: ERROR
Bidang tidak dapat lagi dimodifikasi selama masa aktif kelas atau instance.
Oleh karena itu, kode yang sebelumnya mengubah bidang ini tidak lagi valid.
6007 - Bidang sekarang non-statis
Tingkat keparahan: ERROR
Bidang sekarang menjadi variabel instan daripada variabel kelas. Kode yang
sebelumnya mengakses bidang ini melalui Kelas daripada turunan dari kelas
sudah tidak berlaku.
6008 - Bidang sekarang statis
Tingkat keparahan: ERROR
Bidang sekarang menjadi variabel kelas daripada variabel instan.
Untuk beberapa alasan (mungkin masalah implementasi internal), standar Java
menyatakan bahwa perubahan ini tidak kompatibel dengan biner, dan bahwa
IncompatibleClassChangeError akan dilempar jika kode dikompilasi dengan "lama"
versi kelas digunakan bersama dengan versi "baru" yang bidangnya sekarang
statis.
Karena kode sumber diizinkan untuk mengakses variabel kelas melalui instance itu
class, ini diharapkan menjadi perubahan yang kompatibel dengan kode sumber. Namun saat ini
CLIRR melaporkan ini sebagai ERROR untuk kompatibilitas kode sumber juga.
6009 - Bidang More Diakses
Keparahan: INFO
Dalam versi baru, bidang yang ditentukan dapat diakses oleh lebih banyak kode daripada sebelumnya
sebelumnya.
6010 - Bidang kurang Diakses
Tingkat keparahan: ERROR
Dalam versi baru, bidang yang ditentukan dapat diakses dengan kode yang lebih sedikit daripada sebelumnya
sebelumnya. Oleh karena itu kode yang ada mungkin tidak lagi valid.
6011 - Dihapus konstan Bidang
Tingkat Keparahan Biner: PERINGATAN
Tingkat Keparahan Sumber: ERROR
Kelas baru telah menghapus bidang yang ada di versi lama. Sumber yang sudah ada sebelumnya
kode yang secara langsung mengakses bidang itu tidak akan valid lagi.
Namun, sebelumnya, bidang itu final dan diinisialisasi dengan nilai konstan.
Oleh karena itu kode yang dikompilasi terhadap versi kelas sebelumnya akan memiliki inline
konstanta ini dan akan terus bekerja, menggunakan nilai sebelumnya dari bidang ini. A
peringatan dikeluarkan karena ini seringkali bukan perilaku yang diinginkan. Namun itu bukan
ketidakcocokan biner.
7000 - metode sekarang in Kelas Super
Keparahan: INFO
Kelas lama memiliki metode bernama X. Kelas baru tidak lagi memiliki metode ini, tetapi a
kelas induk mendefinisikan metode ini, jadi tidak ada ketidakcocokan biner atau sumber
terjadi.
Perhatikan bahwa perubahan ini mungkin memiliki efek memaksa kelas baru menjadi
'abstrak'. Jika ini masalahnya, maka perubahan ini dilaporkan secara terpisah.
7001 - metode sekarang in Antarmuka
Keparahan: INFO
Kelas atau antarmuka lama sebelumnya memiliki metode bernama X. Kelas baru atau
antarmuka tidak lagi memiliki metode ini, tetapi antarmuka induk mendefinisikan ini
metode, jadi tidak ada ketidakcocokan biner atau sumber yang terjadi.
Perhatikan bahwa perubahan ini mungkin memiliki efek memaksa kelas baru menjadi
'abstrak'. Jika ini masalahnya, maka perubahan ini dilaporkan secara terpisah.
7002 - metode Dihapus
Tingkat keparahan: ERROR
Kelas atau antarmuka lama memiliki metode bernama X. Kelas atau antarmuka baru tidak
lagi memiliki metode ini, dan metode ini tidak didefinisikan pada kelas induk atau
Antarmuka.
Apakah kesalahan benar-benar terjadi saat runtime untuk perubahan ini tergantung pada penggunaan
pola. Kelas yang dimodifikasi dapat digunakan dengan kode yang ada selama itu
kode yang ada tidak mencoba memanggil metode yang dihapus. Jika panggilan ke yang hilang
metode dibuat, maka pengecualian NoSuchMethodError dihasilkan ketika metode
terjadi pemanggilan.
7003 - metode Kesampingkan Dihapus
Keparahan: INFO
Metode yang ditentukan pada kelas atau antarmuka lama menggantikan metode yang diwarisi
definisi. Kelas atau antarmuka baru tidak lagi memiliki metode ini secara eksplisit
dideklarasikan di atasnya, tetapi masih mewarisi definisi sehingga tidak ada biner
ketidakcocokan. 7004 - Jumlah Argumen Metode Berubah
Tingkat keparahan: ERROR
Metode yang ditentukan memiliki argumen yang ditambahkan atau dihapus. Ini berarti bahwa kode yang
sebelumnya dipanggil itu tidak akan lagi memanggil metode yang sama.
Jika ada definisi metode yang diwarisi dengan prototipe lama, maka tidak ada
ketidakcocokan biner; kode yang dikompilasi terhadap versi lama ini
class sekarang akan memanggil implementasi yang diwarisi. Dalam situasi ini, clirr harus
output pesan INFO daripada kesalahan. Namun pada tanggal saat ini, clirr
tidak memeriksa situasi ini.
Jika tidak ada definisi metode yang diwarisi dengan prototipe lama, maka perubahannya
adalah ketidakcocokan biner.
7005 - metode Argumen Tipe berubah
Tingkat Keparahan Biner: INFO atau ERROR
Tingkat Keparahan Sumber: ERROR
Metode yang ditentukan telah memiliki tipe satu atau lebih argumennya yang dimodifikasi.
Ini berarti kode yang dikompilasi terhadap versi lama kelas tidak akan lagi
memanggil metode yang sama. Namun kode sumber lama yang sama persis, saat dikompilasi
terhadap versi kelas baru dapat memanggil metode ini jika tipe argumennya adalah
kompatibel dengan tugas.
Jika ada definisi metode yang diwarisi dengan prototipe lama, maka tidak ada
ketidakcocokan biner; kode yang dikompilasi terhadap versi lama ini
class sekarang akan memanggil implementasi yang diwarisi. Pada tanggal saat ini, clirr tidak
tidak memeriksa situasi ini.
Jika tidak ada definisi metode yang diwarisi dengan prototipe lama, maka perubahannya
adalah ketidakcocokan biner.
Jika tipe parameter yang diubah semuanya diubah menjadi supertipe sebelumnya
tipe yang dideklarasikan, atau untuk tipe parameter primitif jika diubah menjadi "lebih besar"
ketik dalam setiap kasus, maka kode baru kompatibel dengan kode sumber dengan yang sebelumnya
rilis meskipun tidak kompatibel dengan biner. Perhatikan bahwa dalam situasi ini,
mengkompilasi ulang kode yang menggunakan perpustakaan dapat mengubah perilakunya dari memanggil dan
mewarisi metode untuk memanggil metode pada kelas yang memiliki sedikit berbeda
prototipe. Pada tanggal saat ini, clirr tidak memeriksa situasi ini.
7006 - metode Pengembalian Tipe berubah
Tingkat Keparahan Biner: ERROR
Tingkat Keparahan Sumber: INFO atau ERROR
Metode yang ditentukan telah mengubah tipe pengembalian yang dideklarasikan. Apakah masalah
sebenarnya terjadi saat runtime ketika menggunakan kode yang dikompilasi terhadap versi lama ini
perpustakaan tergantung pada pola penggunaan. Kode lama dapat memanggil metode lain di kelas ini.
Namun setiap upaya untuk memanggil metode yang tipe pengembaliannya telah berubah akan menghasilkan
a NoSuchMethodError dilemparkan saat metode dipanggil, karena pengembaliannya
type adalah bagian dari "tanda tangan metode".
Perubahan tersebut kompatibel dengan kode sumber jika dan hanya jika tipe pengembalian baru adalah
dapat dialihkan ke tipe pengembalian lama. Ini berarti bahwa:
jika tipe pengembalian lama adalah tipe primitif, maka tipe pengembalian baru harus
lebih sempit dari tipe lama.
jika tipe pengembalian lama adalah antarmuka, maka tipe pengembalian baru harus a
kelas atau antarmuka yang mengimplementasikan tipe pengembalian lama.
jika tipe pengembalian lama adalah kelas, maka tipe pengembalian baru harus berupa subkelas
dari tipe yang dikembalikan sebelumnya.
Clirr saat ini tidak memeriksa kompatibilitas kode sumber untuk perubahan metode
jenis pengembalian; saat ini ini hanya dilaporkan sebagai KESALAHAN.
7007 - metode memiliki menjadi Ditinggalkan
Keparahan: INFO
Metode yang ditentukan telah dinyatakan sebagai "usang". Ini selalu
perubahan yang kompatibel dengan biner serta perubahan yang kompatibel dengan kode sumber.
7008 - metode memiliki menjadi Tidak digunakan lagi
Keparahan: INFO
Metode yang ditentukan dinyatakan "usang" di versi sebelumnya, tetapi tidak
lagi usang dalam rilis saat ini. Meskipun sedikit tidak biasa, ini adalah
diizinkan. Perubahan ini selalu merupakan perubahan yang kompatibel dengan biner serta
perubahan yang kompatibel dengan kode sumber.
7009 - metode is sekarang kurang Diakses
Tingkat keparahan: ERROR
Izin akses yang terkait dengan metode yang ditentukan telah diperketat menjadi
mengizinkan lebih sedikit kode pengguna untuk mengakses metode.
Apakah perubahan ini merupakan masalah kompatibilitas kode sumber atau tidak tergantung pada
pola penggunaan.
Perubahan ini harus berupa ketidakcocokan biner. Namun, perhatikan bahwa JVM saat ini melakukannya
tidak memvalidasi ini. Kode yang dikompilasi dengan versi kelas sebelumnya dapat
berhasil memanggil metode yang hak aksesnya tidak lagi mereka miliki.
Namun demikian, Spesifikasi Bahasa Java menyatakan bahwa ini adalah kesalahan, jadi
clirr melaporkan perubahan ini sebagai ketidakcocokan biner.
7010 - metode is sekarang More Diakses
Keparahan: INFO
Izin akses yang terkait dengan metode yang ditentukan telah dilonggarkan ke
mengizinkan lebih banyak kode pengguna untuk mengakses metode. Ini selalu merupakan biner dan kode sumber
perubahan yang kompatibel.
7011 - metode Ditambahkan
Keparahan: INFO
Metode non-abstrak telah ditambahkan ke kelas yang ditentukan. Ini selalu
perubahan yang kompatibel dengan biner.
Ini juga merupakan perubahan yang kompatibel dengan kode sumber.
T: jika metode baru menimpa metode yang diwarisi, lalu versi mana yang mengkode
dikompilasi terhadap permintaan perpustakaan lama?
7012 - metode Ditambahkan untuk Antarmuka
Tingkat Keparahan Biner: ERROR
Tingkat Keparahan Sumber: ERROR
Deklarasi metode telah ditambahkan ke antarmuka yang ditentukan. Ini selalu
dilaporkan sebagai kesalahan kompatibilitas biner, tetapi dalam praktiknya kelas yang diubah mungkin
berhasil digunakan dengan kode yang dikompilasi terhadap antarmuka lama tergantung pada
pola penggunaan.
Kode lama yang memanggil metode pada kode yang dikompilasi terhadap yang baru (diperluas)
antarmuka akan terus bekerja tanpa masalah. Dan kode lama yang mengimplementasikan
versi lama dari antarmuka juga akan terus bekerja dengan benar selama tidak ada
kode mencoba untuk memanggil salah satu metode yang baru ditambahkan terhadap instance itu. Tetapi
kode yang (secara sah) memanggil salah satu metode baru di antarmuka terhadap
objek yang hanya mengimplementasikan antarmuka versi lama akan menyebabkan
AbstractMethodError akan dilempar pada saat pemanggilan metode dicoba.
Menambahkan metode ke antarmuka selalu dilaporkan sebagai KESALAHAN, karena kelas
yang mengimplementasikan antarmuka itu sekarang harus dimodifikasi untuk mengimplementasikan yang dideklarasikan
Metode.
7013 - Abstrak metode Ditambahkan untuk Kelas
Tingkat Keparahan Biner: ERROR
Tingkat Keparahan Sumber: ERROR
Deklarasi metode abstrak telah ditambahkan ke kelas yang ditentukan. Ini adalah
selalu dilaporkan sebagai kesalahan kompatibilitas biner, tetapi dalam praktiknya kelas yang diubah
mungkin berhasil digunakan dengan kode yang dikompilasi terhadap kelas lama tergantung pada
pola penggunaan.
Jika instance objek yang dikompilasi terhadap kelas lama dibuat, maka mereka
metode dapat dipanggil tanpa masalah. Tetapi jika metode abstrak yang baru ditambahkan adalah
pernah dipanggil, maka AbstractMethodError dilemparkan pada saat metode
doa dicoba.
7014 - metode sekarang terakhir
Tingkat keparahan: ERROR
Metode ini sebelumnya non-final, dan sekarang final. Subclass dari kelas ini
tidak akan lagi dikompilasi atau dijalankan.
Ketika kelas lama berisi metode ini adalah final (secara eksplisit atau hanya dengan menyediakan
konstruktor pribadi) maka subkelas tidak bisa ada. Clirr saat ini tidak memeriksa
untuk situasi ini, jadi ini akan menimbulkan alarm palsu dalam beberapa kasus sudut.
7015 - metode sekarang non-final
Keparahan: INFO
Metode ini sebelumnya final, dan sekarang non-final. Ini selalu
perubahan yang kompatibel dengan biner.
8000 - Kelas Ditambahkan
Keparahan: INFO
Versi baru perpustakaan memiliki kelas yang tidak ada di versi lama
versi.
8001 - Kelas Dihapus
Tingkat keparahan: ERROR
Versi baru perpustakaan tidak lagi berisi kelas yang ditentukan.
CONTOH
Periksa kompatibilitas perpustakaan dengan versi sebelumnya:
clirr -o foo-1.0.jar -n foo-2.0.jar
Periksa kompatibilitas mundur dari perpustakaan baru tergantung pada 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
HOMEPAGE
http://clirr.sourceforge.net
November 2013 CLIRR(1)
Gunakan clirr online menggunakan layanan onworks.net