2009-08-21 4 views
15

Tôi có một dự án eclipse trong đó mỗi thư mục nguồn có thư mục đầu ra liên quan của riêng nó. Thay vì các lớp/nó được gọi là/eclipse-classes.Làm thế nào để cấu hình classpath eclipse được sử dụng cho các bài kiểm tra junit?

Vì vậy, nếu tôi có một thư mục: src/main/java (maven điều điển hình) thư mục đích là: mục tiêu/eclipse-lớp

Và tương tự như vậy đối với các nguồn tài nguyên, vv

Điều này có vẻ để làm việc (tức là eclipse tạo ra các tệp .class được đặt bên trong các thư mục này) nhưng chạy bất kỳ bài kiểm tra Junit nào ném ra một ngoại lệ cho biết "lớp không tìm thấy". Tôi đang chạy JUnit bằng cách sử dụng trình kiểm tra nhật thực được tích hợp sẵn (tức là nhấp chuột phải vào lớp, "chạy dưới dạng", "kiểm tra Junit").

Sao chép thư mục/lớp học eclipse vào/lớp làm cho chúng thành công, nghĩa là nhật thực đang sử dụng/lớp học, nhưng tôi không thể tìm thấy bất kỳ tùy chọn cấu hình nào để thay đổi nó. Có cách nào để tìm ra đâu và tại sao nhật thực vẫn đang sử dụng thư mục/classes?

(có lẽ có liên quan, tôi cũng đang sử dụng plugin m2eclipse)

Một số thông tin bổ sung lấy cảm hứng từ câu trả lời Giàu của người bán: Maven được cấu hình để chạy sau những thay đổi tài nguyên:

process-resources resources:testResources 

Trong khi điều này sẽ không làm bất cứ điều gì hữu ích (bản sao vào thư mục sai) các nguồn tài nguyên không phải là vấn đề atm kể từ khi họ kết thúc ở vị trí chính xác.

Các mục nhập .classpath sẽ ổn. Có một loạt các tiểu dự án maven để làm tổ đi một chút sâu hơn so với những gì Giàu đăng, nhưng nếu không nó là giống hệt nhau ngoại trừ dòng này:

<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> 

Tôi nghĩ chúng ta có thể không cần điều đó một nhưng nó không làm tổn thương bất cứ điều gì atm .

edit2: Kiểm tra thêm cho thấy nhật thực đang tạo tệp lớp trong cả thư mục/eclipse-classes và thư mục/classes. Có vẻ như m2eclipse đang chạy mvn xây dựng trong nền khi xây dựng tự động, nhưng tôi dường như không thể tìm thấy một cách để vô hiệu hóa này. Tôi sẽ cố gắng liên lạc với các nhà phát triển m2eclipse nếu không ai ở đây có bất kỳ ý tưởng nào khác.

+0

bạn có nghĩa là đối với thư mục nguồn "máy chủ" và "máy khách", bạn sẽ có "các lớp máy chủ" và "các lớp ứng dụng khách" làm thư mục đầu ra không? –

+0

Làm thế nào để bạn bắt đầu JUnit? Bạn có sử dụng trình cắm thêm JUnit Eclipse hay bạn bắt đầu các bài kiểm tra đơn vị từ Maven? – Dirk

+0

Tôi đã thêm câu trả lời trong văn bản câu hỏi. – wds

Trả lời

7

Nếu bạn sử dụng m2eclipse, thì cấu hình trong dự án Eclipse bị ghi đè bởi plugin. Xem this article để biết giải pháp.

Lý do cho điều này là một số plugin maven không thể đối phó với một thư mục đó nằm ngoài target/, vì vậy các nhà phát triển m2eclipse buộc các thư mục cho các lớp học biên soạn được target/classestarget/test-classes, không có vấn đề gì bạn cấu hình trong Eclipse.

Bằng cách sử dụng hồ sơ, bạn có thể sử dụng các thư mục khác nhau cho Eclipse. Tuy nhiên, không nên thay đổi thư mục đầu ra cho maven (và các plugin của nó).

+0

Tôi không nghĩ như vậy, trình biên dịch eclipse là xuất các lớp học vào các thư mục được xác định riêng biệt tốt. Vì vậy, trình biên dịch eclipse được chọn lên trên các thư mục đầu ra của tôi, đó là classpath thời gian chạy bị hỏng. Tôi không muốn maven chịu trách nhiệm tạo ra các tệp .class đó vì nó có khả năng phá vỡ biên dịch gia tăng. – wds

+0

Ngoài ra, giải pháp được đề cập dường như được hướng đến việc định cấu hình maven để đặt các tệp .class của nó ở nơi khác khi nhật thực đang được sử dụng, vì vậy nhật thực có thể sử dụng mục tiêu/lớp. Tôi đang tiếp cận nó từ phía bên kia tôi đoán: cấu hình nhật thực để thoát ra khỏi con đường của maven. Điều này có vẻ giống như một cách tiếp cận hợp lý hơn với tôi (không gây ô nhiễm dự án .pom), nhưng chỉ khi plugin junit bằng cách nào đó sử dụng đường dẫn xây dựng để tạo ra classpath thời gian chạy của nó. – wds

+0

Công việc này xung quanh cố định vấn đề classpath của tôi kể từ khi di chuyển từ maven-eclipse-plugin để m2eclipse. Cảm ơn vì đăng. – JamesC

4

Tích hợp JUnit Eclipse không có cấu hình lớp đường dẫn đặc biệt, nó sẽ làm việc các thư mục đầu ra được xác định trong đường dẫn lớp của bạn và sẽ tìm tất cả các lớp được biên dịch cho các thư mục đó. Nó có thể là có một cái gì đó dodgy trong tập tin .classpath của bạn, để JUnit là nhầm lẫn (theo mặc định các tập tin .classpath ẩn từ xem, nó nằm trong thư mục gốc của dự án).

Dựa trên mô tả của bạn, tôi sẽ thấy các mục nhập như dưới đây (lưu ý thư mục đầu ra mặc định và ghi đè cho src/main/java và src/main/resources). Liệu classpath của bạn trông khác hẳn, nếu có thì đó có thể là vấn đề

<classpathentry excluding="**" kind="src" output="target/eclipse-classes" path="src/main/resources"/> 
<classpathentry kind="src" output="target/eclipse-classes" path="src/main/java"/> 
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> 
<classpathentry kind="output" path="target/classes"/> 

Đây là một shot dài, nhưng nó cũng có thể là một Maven sạch được cấu hình trên dự án của bạn, nếu đó là trường hợp nội dung của mục tiêu/eclipse-classes sẽ bị loại bỏ bất cứ khi nào mục tiêu sạch sẽ được chạy, vì vậy các bài kiểm tra của bạn sẽ bị xóa khỏi hệ thống tệp trước khi chạy thử nghiệm. Bạn có thể xem Maven đang chạy những mục tiêu nào bằng cách mở các thuộc tính của dự án (alt-enter) và chọn mục Maven.


Phần này không trả lời trực tiếp câu hỏi của bạn, nhưng bạn có thể thấy hữu ích. Tôi có xu hướng có các thư mục đầu ra Eclipse giống như cho Maven và không có vấn đề bên trong Eclipse (tôi sửa đổi trình xây dựng Maven để chỉ chạy các tài nguyên quy trình để nó không cố biên dịch).

Nếu tôi làm một Maven xây dựng trình biên dịch Maven sẽ xây dựng bất kỳ lớp học đã thay đổi nào (có thể là tất cả các lớp nếu có bao gồm phần mềm sạch). Một sửa đổi tiếp theo trong Eclipse được phát hiện bởi trình biên dịch gia tăng và được xử lý, tất cả đều ổn. Tôi tắt Build Automatically, nhưng đó chỉ là vì nó làm phiền tôi, có thể là Maven và Eclipse fght nếu bạn tắt cả hai.

+0

Tôi khá chắc chắn maven chỉ chạy quy trình tài nguyên. Tôi sẽ thử phần còn lại vào thứ hai và lấy lại cho bạn. – wds

+0

thêm một số thông tin, không thấy bất cứ điều gì có thể giải thích nó ... – wds

+0

Tôi đã +1 bài đăng của bạn vì cuối cùng tôi đã từ bỏ và cấu hình maven và nhật thực để sử dụng cùng một thư mục đầu ra. Nó phá vỡ rất thỉnh thoảng nhưng tôi đoán đó là Good Enough (TM). – wds

1

Chỉ trong trường hợp bạn đang mở để thử một plugin khác cho điều này: Tôi sử dụng trình cắm thêm maven-eclipse để tạo cài đặt dự án Eclipse của tôi. Tôi cấu hình các plugin để cấu hình dự án Eclipse của tôi để sử dụng một thư mục đầu ra hoàn toàn riêng biệt cho các lớp (xem bên dưới). Nó liên quan đến gốc của dự án, vì vậy nó nằm ngoài mục tiêu.

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-eclipse-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <outputDirectory>eclipse_build</outputDirectory> 
     </configuration> 
    </plugin> 

Điều này rất hữu ích cho tôi, kể cả có thể chạy thử nghiệm ngay trên hộp, cả qua Maven và Eclipse.

0

thử chạy mvn eclipse:eclipse. Điều này đã khắc phục sự cố cho tôi