คำเตือนมด:“ ไม่ได้ตั้งค่า '' includeantruntime '”


397

ฉันได้รับคำเตือนต่อไปนี้:

[javac] build.xml:9: warning: 'includeantruntime' was not set, 
defaulting to build.sysclasspath=last; set to false for repeatable builds

สิ่งนี้หมายความว่า?

คำตอบ:


388

Ant Runtime

เพียงตั้งค่า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 ถูกตั้งค่า โดยปกติแล้วจะเป็นการดีที่สุดหากตั้งค่าเป็นเท็จดังนั้นพฤติกรรมของสคริปต์จะไม่อ่อนไหวกับสภาพแวดล้อมที่เรียกใช้


Apache Ant (TM) เวอร์ชั่น 1.8.2 รวบรวมเมื่อวันที่ 20 ธันวาคม 2010
496949

ดังนั้นหากคุณต้องการ ant runtime ใน classpath ให้ตั้งค่าเป็นใช่ / จริงมิฉะนั้นเป็นไม่ / เท็จ ฉันเดาว่าคุณไม่ต้องการมัน
Daniel Kutik

5
+1, คำตอบที่ดี ผมแค่หวังว่าฉันจะตั้งค่าที่ครั้งหนึ่งเคยเป็นหนึ่งใน buildfile แทนการทิ้งขยะทุกสาย javac กับมัน ...
Jonik

1
มีการตั้งค่าเป็น True เป็นกรณีใด
Lorenzo Lerate

"ว่าจะรวมไลบรารีรันไทม์ Ant ใน classpath หรือไม่ค่าเริ่มต้นคือใช่เว้นแต่ build.sysclasspath จะถูกตั้งค่าโดยปกติจะเป็นการดีที่สุดหากตั้งค่านี้เป็นเท็จดังนั้นพฤติกรรมของสคริปต์จะไม่อ่อนไหวกับสภาพแวดล้อมที่เรียกใช้ "
Daniel Kutik

72

@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จะมีผลบังคับใช้ทั่วโลกระงับคำเตือนที่จำใจไม่ได้ในทุกโครงการของคุณ


1
ใช้งานได้ดีสำหรับการดัดแปลงไฟล์ Ant build ที่มีอยู่ด้วยภารกิจ javac จำนวนมาก องค์ประกอบ presetdef เข้าไปในองค์ประกอบของโครงการ
saxman

@jwfearn: สามารถใช้presetdefกลอุบายที่คล้ายกันนี้สำหรับงาน Ant ที่ไม่ได้มีอยู่แล้วได้หรือไม่? ฉันได้ลองทำสิ่งนี้scalacแต่เนื่องจากbuild.xmlไฟล์ที่ต่ำลงต้องกำหนดscalacงานด้วยตนเองพวกเขาจึงแทนที่สิ่งที่ฉันตั้งไว้ที่ระดับบนสุด
Stuart Golodetz

2
บันทึกย่อที่ใช้ presetdef จะทำให้เกิดการเตือนมดว่างาน javac ได้รับการนิยามใหม่ เพิ่มindexantruntimeให้กับแต่ละภารกิจ javac เพื่อหลีกเลี่ยงปัญหานี้ ฉันไม่ได้ตระหนักถึงข้อเสียของคำเตือน แต่สิ่งนี้อาจเป็นประโยชน์สำหรับผู้ที่ต้องการสร้างงานที่สะอาด
mikijov

ใช่ presetdef ให้ "พยายามแทนที่คำนิยามเก่าของ task javac"
mike jones

62

เชษฐ์ Hoseyเขียนคำอธิบายที่ดีที่นี่ :

ในอดีต Ant มักรวมรันไทม์ของตัวเองไว้ใน classpath ที่พร้อมใช้งานสำหรับงาน javac ดังนั้นไลบรารีใด ๆ ที่รวมอยู่ใน Ant และไลบรารีใด ๆ ที่มีให้ใช้งาน ant จะอยู่ใน classpath ของบิลด์โดยอัตโนมัติไม่ว่าคุณจะชอบหรือไม่ก็ตาม

มีการตัดสินใจแล้วว่านี่อาจไม่ใช่สิ่งที่คนส่วนใหญ่ต้องการ ดังนั้นตอนนี้มีตัวเลือกสำหรับมัน

ถ้าคุณเลือก "true" (สำหรับ includeantruntime) อย่างน้อยคุณก็รู้ว่า build classpath ของคุณจะมี Ant runtime หากคุณเลือก "เท็จ" แสดงว่าคุณยอมรับความจริงที่ว่าพฤติกรรมการสร้างจะเปลี่ยนแปลงระหว่างเวอร์ชั่นเก่าและ 1.8+

รำคาญเท่าที่คุณเห็นคำเตือนนี้คุณจะมีความสุขน้อยลงถ้างานสร้างของคุณพังทั้งหมด การรักษาลักษณะการทำงานเริ่มต้นนี้ช่วยให้ไฟล์บิลด์ที่ไม่ได้แก้ไขสามารถทำงานได้อย่างต่อเนื่องระหว่างเวอร์ชันของ Ant


3
ฉันมักจะคิดว่านี่เป็นคุณสมบัติ / ข้อความที่โง่ที่สุดที่เคยมีมา ใครต้องการ 'สร้างซ้ำได้' ในเครื่องมือจัดการการกำหนดค่า ;)
karmakaze

1
คำตอบนี้ดูเหมือนจะเป็นคำตอบเดียวที่บอกเราว่าคำเตือนจริงหมายถึงอะไร
ty

26

คำตอบจาก 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>

5

ถ้าคุณชอบฉันทำงานจาก commandline คำตอบอย่างรวดเร็วคือการดำเนินการ

export ANT_OPTS=-Dbuild.sysclasspath=ignore

จากนั้นเรียกใช้สคริปต์ ant ของคุณอีกครั้ง


นี้ช่วยให้ผมมาก set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignoreฉันใช้
พอลวาร์กัส

5

ใช้ <property name="build.sysclasspath" value="last"/>ในไฟล์ build.xml ของคุณ

สำหรับรายละเอียดเพิ่มเติมค้นหาincludeAntRuntimeใน Ant javac

ค่าที่เป็นไปได้อื่น ๆ สามารถพบได้ที่นี่


-3

ฉันประสบปัญหานี้เหมือนกันฉันเช็คอินโปรแกรมและคุณสมบัติ มีการอัปเดตได้ติดตั้งสำหรับ jdk1.8 ซึ่งไม่สามารถใช้งานร่วมกับการตั้งค่าเก่าของฉัน (jdk1.6.0) สำหรับ ant ใน eclipse ฉันติดตั้งการปรับปรุงนั้น ตอนนี้โครงการมดของฉันกำลังสร้างความสำเร็จ

ลองใช้หวังว่านี่จะเป็นประโยชน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.