cảnh báo về kiến: không được đặt ra


397

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:


388

Ant Runtime

Đơ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".

Chi tiết bổ sung

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.


Phiên bản Apache Ant (TM) 1.8.2 được biên dịch vào ngày 20 tháng 12 năm 2010
user496949

Vì vậy, nếu bạn cần thời gian chạy ant trong classpath, đặt nó thành yes / true nếu không thành / false. Tôi đoán bạn không cần nó.
Daniel Kutik

5
+1, câu trả lời tuyệt vời. Tôi chỉ ước mình có thể đặt nó một lần ở đâu đó trong buildfile thay vì xả rác mọi cuộc gọi javac với nó ...
Jonik

1
Trường hợp nào nó được đặt thành True?
Lorenzo Lellow

"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. "
Daniel Kutik

72

Như @Daniel Kutik đã đề cập, presetdeflà 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.xmltệ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.xmltệ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 javacnhiệ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 javactá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_OPTSlà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_OPTStheo cùng một cách. Ngoài ra, ANT_OPTSsẽ á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


1
Hoạt động tuyệt vời để trang bị thêm một tệp xây dựng Ant hiện có với nhiều tác vụ javac. Phần tử presetdef đi ngay bên trong phần tử dự án.
saxman

@jwfearn: Một presetdefthủ 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.xmlcác tệp thấp hơn phải xác định thủ công scalactác vụ, chúng ghi đè lên bất cứ thứ gì tôi đặt ở cấp cao nhất.
Stuart Golodetz

2
Lưu ý rằng việc sử dụng presetdef sẽ gây ra cảnh báo về kiến ​​rằng tác vụ javac đã được xác định lại. Bổ sung thêm vào mỗi tác vụ javac để tránh điều này. Tôi không nhận thức được những nhược điểm của cảnh báo. Nhưng điều này có thể hữu ích cho những người 'cần' bản dựng sạch.
mikijov

Có, presetdef đưa ra "Cố gắng ghi đè định nghĩa cũ của nhiệm vụ javac"
mike jones

62

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.


3
Tôi luôn nghĩ rằng đây là tính năng / tin nhắn ngớ ngẩn nhất từng có. Ai muốn 'bản dựng lặp lại' trong công cụ quản lý cấu hình của họ? ;)
karmakaze

1
Câu trả lời này dường như là câu duy nhất cho chúng ta biết cảnh báo thực sự có ý nghĩa gì.
ty

26

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>

5

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.


Điều này giúp tôi rất nhiều . Tôi đang sử dụng set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore.
Paul Vargas

5

Sử dụng <property name="build.sysclasspath" value="last"/>trong tệp build.xml của bạn

Để biết thêm chi tiết tìm kiếm includeAntRuntimetrong Ant javac

Các giá trị khác có thể được tìm thấy ở đây


-3

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.