Saya sedang menulis Plugin Minecraft menggunakan IntelliJ IDEA Ultimate dengan gradle. Saya telah menambahkan ketergantungan org.spigotmc:spigot-api:1.13.2-R0.1-SNAPSHOT sebagai compileOnly. Selama pengembangan, saya perhatikan bahwa gradle mengkompilasi kode saya dengan cara yang berbeda dari IntelliJ. Misalnya, IntelliJ tidak dapat menerima addPassenger pada Boat, tetapi gradle mengkompilasinya. Sebaliknya, jika saya mengubahnya menjadi setPassenger, IntelliJ tidak menandainya sebagai kesalahan, tetapi gradle gagal dikompilasi. Saya mencoba untuk membatalkan cache, mengimpor ulang, membersihkan, bahkan menghapus direktori %userprofile%\.gradle, tidak ada yang membantu. Sebagai POC, saya mengubah compileOnly menjadi compile dan berfungsi dengan baik, IntelliJ dan hasil kompilasi gradle konsisten. Apa alasannya?

0
Andret2344 7 Agustus 2019, 00:51

1 menjawab

Jawaban Terbaik

Ok, saya menemukan solusinya (dan lupa tentang pertanyaan ini).

Saya telah menggunakan banyak dependensi, dan satu memuat yang lain dengan versi lama yang saya muat secara implisit di build.gradle saya. Namun, mereka bukan dependensi yang persis sama, tetapi yang paralel. Jadi gradle tidak dapat memilih versi yang lebih tinggi dari satu ketergantungan. Solusinya adalah mengecualikan ketergantungan yang dimuat secara eksplisit ini dan semuanya bekerja dengan baik.

Sebelum:

dependencies {
    compileOnly 'com.sk89q.worldedit:worldedit-bukkit:7.0.1'
    compileOnly group: 'org.spigotmc', name:'spigot-api', version: '1.15.1-R0.1-SNAPSHOT'
}

Setelah:

dependencies {
    compileOnly('com.sk89q.worldedit:worldedit-bukkit:7.0.1') {
        exclude `org.bukkit:bukkit:1.15.1-R0.1-SNAPSHOT`
    }
    compileOnly group: 'org.spigotmc', name:'spigot-api', version: '1.15.1-R0.1-SNAPSHOT'
}
0
Andret 4 April 2020, 15:17