2013-08-23 33 views
5

Tôi có một dự án Java trong Eclipse, với các kiểm tra JUnit trong thư mục src/test của tôi. Tôi cũng đã thêm một lớp vào các bài kiểm tra của tôi với các microbenchmarks Caliper và tôi muốn có thể chạy các thử nghiệm này từ bên trong Eclipse.Chạy caliper từ nhật thực trong phạm vi kiểm tra của maven

Vì mã Caliper là mã kiểm tra, tôi đã thêm Caliper làm phụ thuộc vào Maven trong phạm vi test. Điều đó làm cho nó hiển thị trong classpath khi tôi chạy thử nghiệm JUnit, nhưng tôi không thể nhìn thấy một cách để chạy một lớp tùy ý với các phụ thuộc kiểm tra trong classpath. Những gì tôi đã thử làm là thêm một cấu hình Run mới cho một ứng dụng Java, nghĩ rằng tôi có thể khởi chạy CaliperMain với lớp bên phải làm tham số, nhưng bình Caliper không nằm trên classpath và tôi không thể xem cách thêm nó.

Tôi không muốn di chuyển mã điểm chuẩn và sự phụ thuộc của mình vào phạm vi main, vì đó là mã kiểm tra! Có vẻ như quá mức cần thiết để chuyển nó thành một dự án hoàn toàn riêng biệt.

+0

Cấu hình chạy Eclipse chỉ liệt kê "Maven Dependencies" cho đường dẫn lớp của tôi. Nó dường như không tách biệt các phụ thuộc thử nghiệm và không kiểm tra. Bạn đã xác minh rằng Caliper đang thực sự được đưa vào chưa? – gk5885

+0

@ gk5885, nó có sẵn trong Package Explorer, có sẵn trên đường dẫn lớp khi chạy cấu hình kiểu 'JUnit' nhưng không có sẵn trên đường dẫn lớp khi chạy cấu hình kiểu 'Ứng dụng Java'. –

+0

Tôi không chắc tôi hoàn toàn hiểu kịch bản của bạn, đặc biệt là "chạy một lớp tùy ý với các phụ thuộc kiểm tra trong đường dẫn lớp". Bạn không thể chỉ cần tạo và chạy một thử nghiệm JUnit mà sẽ làm chính xác những gì CaliperMain thường làm trong phương pháp chính của nó? – Morfic

Trả lời

5

Bạn sẽ có thể thực hiện việc này với Maven Exec Plugin. Đối với dự án của tôi, tôi đã chọn tạo hồ sơ điểm chuẩn có thể chạy với lệnh maven mvn compile -P benchmarks.

Để cấu hình một cái gì đó như thế này, bạn có thể thêm một cái gì đó dọc theo dòng sau đây để pom.xml của bạn, xác định phạm vi của classpath như kiểm tra sử dụng <classpathScope> tag:

<profiles> 
    <profile> 
     <id>benchmarks</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>exec-maven-plugin</artifactId> 
        <version>1.2.1</version> 
        <executions> 
         <execution> 
          <id>caliper</id> 
          <phase>compile</phase> 
          <goals> 
           <goal>java</goal> 
          </goals> 
          <configuration> 
           <classpathScope>test</classpathScope> 
           <mainClass>com.google.caliper.runner.CaliperMain</mainClass> 
           <commandlineArgs>com.stackoverflow.BencharkClass,com.stackoverflow.AnotherBenchmark</commandlineArgs> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Ngoài ra, nếu bạn' muốn chỉ định rất nhiều tùy chọn cho caliper, nó có lẽ là dễ dàng hơn để sử dụng <arguments> tags:

<executions> 
    <execution> 
     <id>caliper</id> 
     <phase>compile</phase> 
     <goals> 
      <goal>java</goal> 
     </goals> 
     <configuration> 
      <classpathScope>test</classpathScope> 
      <mainClass>com.google.caliper.runner.CaliperMain</mainClass> 
      <arguments> 
       <argument>com.stackoverflow.BencharkClass</argument> 
       <argument>--instrument</argument> 
       <argument>runtime</argument> 
       <argument>-Cinstrument.allocation.options.trackAllocations=false</argument> 
      </arguments> 
     </configuration> 
    </execution> 
</executions> 

tùy chọn cấu hình hơn (li ke -Cinstrument.allocation.options.trackAllocations ở trên) có thể được tìm thấy here và các tùy chọn thời gian chạy khác (như --instrument ở trên) có thể được tìm thấy here.

Sau đó, nếu bạn đang sử dụng các plugin Eclipse m2 Maven, bạn có thể nhấp chuột phải vào thư mục dự án của bạn và chọn Run as... -> Maven Build... và nhập cái gì đó như clean install trong hộp Goals đầu vào và benchmarks trong hộp Profiles nhập và nhấp Run và bạn sẽ thấy đầu ra trong bảng điều khiển Eclipse của bạn. Điều quan trọng cần lưu ý là tôi đã sử dụng bản dựng ảnh chụp nhanh của Caliper bằng cách kiểm tra nguồn bằng cách sử dụng git clone https://code.google.com/p/caliper/, được đề xuất tại thời điểm bài đăng này để tận dụng lợi thế của API mới nhất.

+0

Điều này cho tôi một lỗi: '' '[stderr] CICompilerCount of 1 không hợp lệ; ít nhất phải là 2 [stderr] Lỗi: Không thể tạo Máy ảo Java. [stderr] Lỗi: Đã xảy ra trường hợp ngoại lệ chết người. Chương trình sẽ thoát.''' Bạn có thể vui lòng cho tôi một con trỏ làm thế nào để sửa lỗi này, tức là cách chuyển đối số cần thiết cho JVM? – panmari