Tôi nhận được cảnh báo sau:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Điều đó có nghĩa là gì?
Tôi nhận được cảnh báo sau:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Điều đó có nghĩa là gì?
Câu trả lời:
Đơn giản chỉ cần đặt includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Nếu bạn phải sử dụng javac
-task nhiều lần bạn có thể muốn xem xét sử dụng PreSetDef
để xác định javac
-task của riêng bạn luôn đặt includeantruntime="false"
.
Từ http://www.coderanch.com/t/503097/tools/warning-includeantr.78-was-not-set :
Điều đó gây ra bởi một lỗi sai được giới thiệu trong Ant 1.8. Chỉ cần thêm một thuộc tính của tên đó vào tác vụ javac, đặt thành sai và quên nó từng xảy ra.
Từ http://ant.apache.org/manual/T task / javac.html :
Có bao gồm các thư viện thời gian chạy Ant trong đường dẫn lớp hay không; mặc định là có, trừ khi build.sys classpath được đặt. Thông thường tốt nhất là đặt điều này thành false để hành vi của tập lệnh không nhạy cảm với môi trường mà nó được chạy.
Như @Daniel Kutik đã đề cập, presetdef
là một lựa chọn tốt. Đặc biệt là nếu một người đang làm việc trên một dự án có nhiều build.xml
tệp mà một người không thể hoặc không muốn chỉnh sửa (ví dụ: những người từ bên thứ ba.)
Để sử dụng presetdef
, hãy thêm các dòng này vào build.xml
tệp cấp cao nhất của bạn :
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Bây giờ tất cả các javac
nhiệm vụ tiếp theo về cơ bản sẽ kế thừa includeantruntime="false"
. Nếu các dự án của bạn thực sự cần thư viện ant runtime, bạn có thể thêm chúng rõ ràng vào tập tin xây dựng HOẶC được đặt includeantruntime="true"
. Sau này cũng sẽ thoát khỏi cảnh báo.
Các javac
tác vụ tiếp theo vẫn có thể thay đổi rõ ràng điều này nếu muốn, ví dụ:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
Tôi khuyên bạn không nên sử dụng ANT_OPTS
. Nó hoạt động, nhưng nó đánh bại mục đích của cảnh báo. Cảnh báo cho người ta biết rằng bản dựng của một người có thể hoạt động khác trên hệ thống khác. Việc sử dụng ANT_OPTS
làm cho điều này thậm chí còn có khả năng hơn bởi vì bây giờ mọi hệ thống đều cần sử dụng ANT_OPTS
theo cùng một cách. Ngoài ra, ANT_OPTS
sẽ áp dụng trên toàn cầu, loại bỏ các cảnh báo willy-nilly trong tất cả các dự án của bạn
presetdef
thủ thuật tương tự có thể được thực hiện để làm việc cho các tác vụ Ant không tích hợp không? Tôi đã thử điều này với scalac
, nhưng vì build.xml
các tệp thấp hơn phải xác định thủ công scalac
tác vụ, chúng ghi đè lên bất cứ thứ gì tôi đặt ở cấp cao nhất.
Chet Hosey đã viết một lời giải thích tốt đẹp ở đây :
Trong lịch sử, Ant luôn bao gồm thời gian chạy riêng của nó trong đường dẫn lớp có sẵn cho tác vụ javac. Vì vậy, mọi thư viện có trong Ant và mọi thư viện có sẵn cho ant, sẽ tự động trong đường dẫn lớp của bản dựng của bạn cho dù bạn có thích hay không.
Nó đã được quyết định rằng đây có lẽ không phải là điều mà hầu hết mọi người muốn. Vì vậy, bây giờ có một lựa chọn cho nó.
Nếu bạn chọn "true" (ví dụ như bao gồm), thì ít nhất bạn cũng biết rằng đường dẫn lớp xây dựng của bạn sẽ bao gồm thời gian chạy Ant. Nếu bạn chọn "sai" thì bạn chấp nhận thực tế rằng hành vi xây dựng sẽ thay đổi giữa các phiên bản cũ hơn và 1.8+.
Khó chịu như bạn thấy cảnh báo này, bạn thậm chí sẽ không vui hơn nếu các bản dựng của bạn bị hỏng hoàn toàn. Giữ hành vi mặc định này cho phép các tệp xây dựng chưa sửa đổi hoạt động ổn định giữa các phiên bản của Ant.
Câu trả lời từ Daniel hoạt động hoàn hảo. Đây là một đoạn mẫu mà tôi đã thêm vào build.xml của mình:
<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>
Nếu bạn thích tôi làm việc từ dòng lệnh, câu trả lời nhanh là thực thi
export ANT_OPTS=-Dbuild.sysclasspath=ignore
Và sau đó chạy tập lệnh ant của bạn một lần nữa.
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
.
tôi phải đối mặt với điều này, tôi kiểm tra trong chương trình và tính năng. có một bản cập nhật đã cài đặt cho jdk1.8 không tương thích với cài đặt cũ của tôi (jdk1.6.0) cho kiến trong nhật thực. Tôi cài đặt bản cập nhật đó. Ngay bây giờ, dự án kiến của tôi đang xây dựng thành công.
Hãy thử nó, hy vọng điều này sẽ hữu ích.