2012-05-15 27 views
11

Tôi đang cố gắng tạo ANT báo cáo HTML về thử nghiệm JUNIT trong Eclipse nhưng sau khi tạo bản xây dựng ANT, tôi nhận được các lỗi sau khi tôi chạy nó:Lỗi! Đối số đầu tiên cho hàm Java không tĩnh 'thay thế' không phải là tham chiếu đối tượng hợp lệ

[junitreport] Processing C:\Documents and Settings\Administrator\workspace\Home\junit\TESTS-TestSuites.xml to C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\null785926900 
[junitreport] Loading stylesheet jar:file:/C:/ANT/apache-ant-1.8.3/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl 
[junitreport] : Error! The first argument to the non-static Java function 'replace' is not a valid object reference. 
[junitreport] : Error! Cannot convert data-type 'void' to 'reference'. 
[junitreport] : Fatal Error! Could not compile stylesheet 
[junitreport] Failed to process C:\Documents and Settings\Administrator\workspace\Home\junit\TESTS-TestSuites.xml 

Tôi cần phải làm gì để khắc phục sự cố này?

Dưới đây là các phần của build.xml của tôi, tôi đang cố gắng để chạy:

<target name="Home"> 
    <mkdir dir="${junit.output.dir}"/> 
    <junit fork="yes" printsummary="withOutAndErr"> 
     <formatter type="xml"/> 
     <test name="Home" todir="${junit.output.dir}"/> 
     <classpath refid="Home.classpath"/> 
    </junit> 
</target> 
<target name="junitreport"> 
    <junitreport todir="${junit.output.dir}"> 
     <fileset dir="${junit.output.dir}"> 
      <include name="TEST-*.xml"/> 
     </fileset> 
     <report format="frames" todir="${junit.output.dir}"/> 
    </junitreport> 
</target> 
+2

Thứ hai, làm thế nào chúng ta nên biết gì sai nếu bạn không gửi mã không? –

+4

Sau khi chỉ xây dựng ANT cho JDK thay vì JRE, tôi đã có thể nhận được báo cáo HTML. – user1397000

+0

Bạn đã xây dựng ANT như thế nào cho JDK thay vì JRE ??? –

Trả lời

9

Lỗi Eclipse được ghi rõ tài liệu Bug 384757. Phân tích cho thấy rằng Oracle đã giới thiệu lỗi này. Tôi cần Java phiên bản 7 nhưng JunitReport cần Java phiên bản 5 và các phiên bản đầu của phiên bản Java 6. Cách rõ ràng là thêm đối số "bootclasspath" vào tác vụ junitreport Ant trong khi vấn đề Java được Oracle cố định trong bản phát hành trong tương lai. Thật không may Ant task junitreport không hỗ trợ tùy chọn bootclasspath. Đây có phải là điều mà những người hỗ trợ Ant có thể làm không?

16

Khi tôi gặp phải lỗi này, tôi phải nhấp chuột phải vào tệp build.xml của mình trong Eclipse, chọn tùy chọn "Chạy như kiến ​​xây dựng ..." (thứ 3 trong menu), sau đó nhấp vào tab JRE và chọn "Chạy trong cùng một JRE như không gian làm việc" tùy chọn và sau đó tiến hành để chạy kịch bản. Đối với một số lý do này cố định vấn đề. Tôi thành thật không biết tại sao.

+0

Làm việc cho tôi. Cảm ơn :-) – Mohit

1

Tôi đã thử sử dụng một vài cài đặt JRE/JDK khác nhau (tất cả 1.6 và 1.7) với nhiều vấn đề khác nhau (điều này hoặc thiếu quyền truy cập vào tệp XSL trong jar) cho mỗi.

Nó không phải là một giải pháp hoàn hảo rõ ràng nhưng tôi dường như không chạy vào những vấn đề này nếu báo cáo JUnit là "thô" trong buildfile - không được gói trong một mục tiêu.

Cách giải quyết kém rõ ràng trong mục tiêu đó là một khía cạnh quan trọng của Ant nhưng đôi khi để báo cáo mục tiêu/phụ thuộc xây dựng không phải là nhiệm vụ quan trọng. Nó không phải là quá nhiều của một vấn đề đối với tôi được nêu ra bởi vì tôi đang chạy các báo cáo này trong kindof một thời trang một lần chứ không phải là một phần của một xây dựng.

3

Tôi đã sử dụng jdk1.6.45 và mới nhất apache-ant-1.9.2-bin \

Sự cố được giải quyết.

Theo lưu ý trên MikeBach

Đây là lỗi #, xin vui lòng đọc: https://bugs.eclipse.org/bugs/show_bug.cgi?id=384757 cố định trong Ant.

Kính trọng, Bhagyaraj

+0

Ngoài ra hãy thử: Chạy trong dấu nhắc lệnh nơi tệp build.xml của bạn có mặt để phục hồi nhanh hơn (ANT: JAVA: 1.70_45 và ant-1.9.2) nó thực sự mượt mà, tạo ra báo cáo. – Bhagyaraj

4

tôi gặp tình trạng này khi chạy chương trình java của tôi trên Ubuntu 12.04 với * java 1.7.0_51 * trên Eclipse SDK Juno. Tôi lấy đề nghị của Bhagyaraj đang sử dụng apache-ant-1.9.2 thay vào đó. (p.s. Phiên bản kiến ​​mặc định của Eclipse Juno là * org.apache.ant_1.8.3 *, và tôi sử dụng apache-ant-1.9.3)

Bạn có thể làm theo các bước để thiết lập.

  1. Tải xuống apache-ant-1.9.3-bin.zip và trích xuất đến địa điểm bạn muốn.
  2. Mở nhật thực của bạn và chọn Cửa sổ -> Tùy chọn
  3. Bạn có thể thấy cửa sổ Tùy chọn. Ở phía bên tay trái, vui lòng chọn ant -> runtime
  4. Bây giờ hãy tập trung vào bên tay phải của cửa sổ. Đảm bảo bạn hiện đang ở trên tab Classpath và chọn Ant mục nhập nhà (mặc định) .Các nút ở bên phải là Ant Home ... hiện có thể nhấp.
  5. Không nghi ngờ gì, hãy nhấp vào nút Ant Home ... và chọn thư mục chứa ant-1.9.3 của bạn. Trong bước này, nếu bạn chọn thư mục sai, Eclipse có thể hiển thị thông báo lỗi giống như Nhà Ant được chỉ định không chứa thư mục "lib". Nếu bạn chọn đúng thư mục, Ant mục nhập nhà (mặc định) sẽ trở thành ** Ant mục nhập()
  6. Đừng quên nhấp vào áp dụng.

Sau khi thay đổi chúng, trong khi bạn nhấp chuột phải vào tệp build.xml và chọn Run -> 1 Ant Build, thông báo lỗi sẽ không hiển thị vì kiến ​​của bạn hiện là 1.9.3.

Tôi cũng tải xuống apache-ant-1.8.4 để chạy tệp xây dựng của mình, nhưng lỗi không thể giải quyết được.

+0

+1 Điều này giải quyết được vấn đề của tôi. Cảm ơn! – OceanBlue

+0

Cảm ơn rất nhiều. Nó đã làm việc :) – user2967948

0

Lỗi đã được giới thiệu trong Java 7u5 according to this comment. Một số khác comment giải thích cách giải quyết sự cố, thay đổi bootclasspath. (SỰ TỪ BỎ:. Tôi không cố gắng và thử nghiệm này)

giải pháp này, tuy nhiên, làm việc tốt cho tôi:

  • Tải ant-1.9.4
  • Eclipse> > Tùy chọn >> Ant >> Thời gian chạy >> AntHomeEntries
  • Xóa tất cả các mục nhập classpath 1.8.x
  • Thêm tất cả libs từ 1.9.4 thay vì

Theo Ant Changes, điều này đã được fixed since 1.9.1

Các vấn đề liên quan