Saya menerima peringatan berikut:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Apa artinya ini?
Saya menerima peringatan berikut:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Apa artinya ini?
Jawaban:
Cukup atur includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Jika Anda harus menggunakan javac
-task beberapa kali, Anda mungkin ingin mempertimbangkan PreSetDef
untuk menggunakan javac
-task sendiri yang selalu diset includeantruntime="false"
.
Dari http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :
Itu disebabkan oleh kesalahan pengenalan di Ant 1.8. Tambahkan saja atribut nama itu ke tugas javac, setel ke false, dan lupakan itu pernah terjadi.
Dari http://ant.apache.org/manual/Tasks/javac.html :
Apakah akan menyertakan perpustakaan run-time Ant di classpath; default ke yes, kecuali build.sysclasspath diatur. Biasanya yang terbaik adalah mengatur ini menjadi false sehingga perilaku skrip tidak peka terhadap lingkungan tempat skrip dijalankan.
Seperti yang disebutkan oleh @Daniel Kutik, presetdef
adalah pilihan yang baik. Terutama jika seseorang mengerjakan proyek dengan banyak build.xml
file yang tidak dapat, atau lebih suka tidak diedit (misalnya, dari pihak ketiga.)
Untuk menggunakan presetdef
, tambahkan baris ini di build.xml
file tingkat atas Anda :
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Sekarang semua javac
tugas selanjutnya pada dasarnya akan mewarisi includeantruntime="false"
. Jika proyek Anda benar-benar membutuhkan pustaka runtime semut, Anda dapat menambahkannya secara eksplisit ke file build ATAU set includeantruntime="true"
. Yang terakhir juga akan menyingkirkan peringatan.
javac
Tugas selanjutnya masih dapat secara eksplisit mengubah ini jika diinginkan, misalnya:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
Saya akan merekomendasikan untuk tidak menggunakan ANT_OPTS
. Itu bekerja, tetapi itu mengalahkan tujuan dari peringatan itu. Peringatan itu memberi tahu seseorang bahwa build seseorang mungkin berperilaku berbeda pada sistem lain. Menggunakan ANT_OPTS
membuat ini lebih mungkin karena sekarang setiap sistem perlu menggunakan ANT_OPTS
dengan cara yang sama. Juga, ANT_OPTS
akan berlaku secara global, menekan peringatan mau tak mau di semua proyek Anda
presetdef
trik serupa dibuat agar berfungsi untuk tugas Ant yang bukan bawaan? Saya sudah mencoba ini scalac
, tetapi karena build.xml
file yang lebih rendah harus secara manual mendefinisikan scalac
tugas, mereka menimpa apa pun yang saya atur di tingkat atas.
Chet Hosey menulis penjelasan yang bagus di sini :
Secara historis, Ant selalu menyertakan runtime-nya sendiri di classpath yang disediakan untuk tugas javac. Jadi setiap pustaka yang disertakan dengan Semut, dan pustaka yang tersedia untuk semut, secara otomatis berada di classpath build Anda, suka atau tidak.
Diputuskan bahwa ini mungkin bukan yang diinginkan kebanyakan orang. Jadi sekarang ada opsi untuk itu.
Jika Anda memilih "true" (untuk includeantruntime), maka setidaknya Anda tahu bahwa build classpath Anda akan menyertakan runtime Ant. Jika Anda memilih "false" maka Anda menerima kenyataan bahwa perilaku build akan berubah antara versi yang lebih lama dan 1.8+.
Anda sebal karena melihat peringatan ini, Anda bahkan akan lebih tidak bahagia jika bangunan Anda hancur total. Menjaga perilaku default ini memungkinkan file build yang tidak dimodifikasi untuk bekerja secara konsisten antara versi Ant.
Jawaban dari Daniel bekerja dengan sempurna. Berikut ini cuplikan sampel yang saya tambahkan ke build.xml saya:
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false">
<!-- ^^^^^^^^^^^^^^^^^^^^^^^^^ -->
<classpath>
<path id="application" location="${jar.dir}/${ant.project.name}.jar"/>
<path id="junit" location="${lib.dir}/junit-4.9b2.jar"/>
</classpath>
</javac>
</target>
Jika Anda suka saya bekerja dari commandline, jawaban cepatnya adalah mengeksekusi
export ANT_OPTS=-Dbuild.sysclasspath=ignore
Dan kemudian jalankan kembali script semut Anda.
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
.
Saya menghadapi hal yang sama, saya check in di program dan fitur. ada pembaruan telah menginstal jdk1.8 yang tidak kompatibel dengan pengaturan lama saya (jdk1.6.0) untuk semut di gerhana. Saya menginstal pembaruan itu. sekarang, proyek semutku sedang membangun kesuksesan.
Cobalah, semoga ini membantu.