ฉันได้รับคำเตือนต่อไปนี้:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
สิ่งนี้หมายความว่า?
ฉันได้รับคำเตือนต่อไปนี้:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
สิ่งนี้หมายความว่า?
คำตอบ:
เพียงตั้งค่าincludeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
หากคุณต้องใช้javac
-task หลายครั้งคุณอาจต้องการพิจารณาใช้PreSetDef
เพื่อกำหนดjavac
-task ของคุณเองที่ตั้งค่าไว้เสมอincludeantruntime="false"
ว่าชุดเสมอ
จากhttp://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :
นั่นเกิดจากการป้อนข้อมูลผิดใน Ant 1.8 เพียงเพิ่มแอททริบิวของชื่อนั้นในงาน javac ตั้งเป็นเท็จและลืมไปเลยว่าเคยเกิดขึ้น
จากhttp://ant.apache.org/manual/Tasks/javac.html :
ไม่ว่าจะรวมไลบรารีรันไทม์ Ant ใน classpath หรือไม่ ค่าเริ่มต้นเป็นใช่เว้นแต่ build.sysclasspath ถูกตั้งค่า โดยปกติแล้วจะเป็นการดีที่สุดหากตั้งค่าเป็นเท็จดังนั้นพฤติกรรมของสคริปต์จะไม่อ่อนไหวกับสภาพแวดล้อมที่เรียกใช้
@Daniel Kutik ที่กล่าวถึงpresetdef
เป็นตัวเลือกที่ดี โดยเฉพาะอย่างยิ่งหากมีใครกำลังทำงานในโครงการที่มีbuild.xml
ไฟล์จำนวนมากซึ่งไม่สามารถหรือไม่ต้องการแก้ไข (เช่นที่มาจากบุคคลที่สาม)
วิธีใช้presetdef
เพิ่มบรรทัดเหล่านี้ในbuild.xml
ไฟล์ระดับบนสุดของคุณ:
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
ตอนนี้ที่ตามมาทั้งหมดงานหลักจะสืบทอดjavac
includeantruntime="false"
หากโครงการของคุณจำเป็นต้องมีไลบรารีรันไทม์จริง ๆ คุณสามารถเพิ่มพวกมันลงในไฟล์หรือชุดสร้างของคุณได้อย่างชัดเจนincludeantruntime="true"
หากโครงการของคุณไม่จริงต้องห้องสมุดรันไทม์มดคุณสามารถเพิ่มพวกเขาอย่างชัดเจนที่จะสร้างไฟล์ของคุณหรือการตั้งค่าหลังจะกำจัดคำเตือน
javac
งานที่ตามมาสามารถเปลี่ยนแปลงได้อย่างชัดเจนหากต้องการตัวอย่างเช่น:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
ANT_OPTS
ผมอยากแนะนำให้กับการใช้ มันใช้งานได้ แต่มันเอาชนะวัตถุประสงค์ของการเตือน คำเตือนบอกหนึ่งว่างานสร้างของคนหนึ่งอาจทำงานแตกต่างไปจากระบบอื่น การใช้ANT_OPTS
ทำให้เป็นไปได้มากขึ้นเพราะตอนนี้ทุกระบบจำเป็นต้องใช้ANT_OPTS
ในลักษณะเดียวกัน นอกจากนี้ANT_OPTS
จะมีผลบังคับใช้ทั่วโลกระงับคำเตือนที่จำใจไม่ได้ในทุกโครงการของคุณ
presetdef
กลอุบายที่คล้ายกันนี้สำหรับงาน Ant ที่ไม่ได้มีอยู่แล้วได้หรือไม่? ฉันได้ลองทำสิ่งนี้scalac
แต่เนื่องจากbuild.xml
ไฟล์ที่ต่ำลงต้องกำหนดscalac
งานด้วยตนเองพวกเขาจึงแทนที่สิ่งที่ฉันตั้งไว้ที่ระดับบนสุด
เชษฐ์ Hoseyเขียนคำอธิบายที่ดีที่นี่ :
ในอดีต Ant มักรวมรันไทม์ของตัวเองไว้ใน classpath ที่พร้อมใช้งานสำหรับงาน javac ดังนั้นไลบรารีใด ๆ ที่รวมอยู่ใน Ant และไลบรารีใด ๆ ที่มีให้ใช้งาน ant จะอยู่ใน classpath ของบิลด์โดยอัตโนมัติไม่ว่าคุณจะชอบหรือไม่ก็ตาม
มีการตัดสินใจแล้วว่านี่อาจไม่ใช่สิ่งที่คนส่วนใหญ่ต้องการ ดังนั้นตอนนี้มีตัวเลือกสำหรับมัน
ถ้าคุณเลือก "true" (สำหรับ includeantruntime) อย่างน้อยคุณก็รู้ว่า build classpath ของคุณจะมี Ant runtime หากคุณเลือก "เท็จ" แสดงว่าคุณยอมรับความจริงที่ว่าพฤติกรรมการสร้างจะเปลี่ยนแปลงระหว่างเวอร์ชั่นเก่าและ 1.8+
รำคาญเท่าที่คุณเห็นคำเตือนนี้คุณจะมีความสุขน้อยลงถ้างานสร้างของคุณพังทั้งหมด การรักษาลักษณะการทำงานเริ่มต้นนี้ช่วยให้ไฟล์บิลด์ที่ไม่ได้แก้ไขสามารถทำงานได้อย่างต่อเนื่องระหว่างเวอร์ชันของ Ant
คำตอบจาก Daniel นั้นสมบูรณ์แบบ นี่เป็นตัวอย่างข้อมูลที่ฉันเพิ่มไปยัง build.xml ของฉัน:
<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>
ถ้าคุณชอบฉันทำงานจาก commandline คำตอบอย่างรวดเร็วคือการดำเนินการ
export ANT_OPTS=-Dbuild.sysclasspath=ignore
จากนั้นเรียกใช้สคริปต์ ant ของคุณอีกครั้ง
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
ฉันใช้
ฉันประสบปัญหานี้เหมือนกันฉันเช็คอินโปรแกรมและคุณสมบัติ มีการอัปเดตได้ติดตั้งสำหรับ jdk1.8 ซึ่งไม่สามารถใช้งานร่วมกับการตั้งค่าเก่าของฉัน (jdk1.6.0) สำหรับ ant ใน eclipse ฉันติดตั้งการปรับปรุงนั้น ตอนนี้โครงการมดของฉันกำลังสร้างความสำเร็จ
ลองใช้หวังว่านี่จะเป็นประโยชน์