2009-07-15 50 views
17

Trong Maven, bạn có thể có thời gian biên dịch phụ thuộc và kiểm tra phụ thuộc. Đây là một tính năng mà tôi yêu thích, và plugin M2Eclipse cũng làm cho nó có sẵn trong Eclipse, điều này thật tuyệt vời. Vì vậy, nếu tôi thêm jmock.jar vào dự án của tôi dưới dạng phụ thuộc kiểm tra, nó sẽ hiển thị trên classpath cho các bài kiểm tra JUnit, nhưng sẽ không có mặt khi tôi gỡ lỗi ứng dụng.Các mục nhập đường dẫn Eclipse chỉ được sử dụng cho các thử nghiệm

Đây chính xác là những gì tôi muốn đạt được ngay bây giờ, nhưng không có M2Eclipse hoặc Maven. Có cách nào để làm điều này trong Eclipse đơn giản? (. Có thể không cài đặt bất kỳ plugin)

Trả lời

10

Bạn có thể tách tất cả các bài kiểm tra của bạn vào một dự án khác và thêm các dự án chính là một phụ thuộc (Project-> Properties ->Java Build Path ->Dự án ->Thêm ...)

Cập nhật: Để tránh thay đổi cấu trúc dự án ban đầu, dự án thử nghiệm của bạn có thể sử dụng vị trí được liên kết.

Tạo dự án thử nghiệm như bình thường, bây giờ bạn cần phải tạo tài nguyên được liên kết để đưa vào thư mục src/test/java. Tốt nhất là tạo ra nó bằng cách sử dụng một biến để các dự án của bạn có thể giữ lại một số nền tảng độc lập. Để tạo thư mục liên kết mới chọn New ->Thư mục, đầu vào src trong tên thư mục: lĩnh vực sau đó nhấp nâng cao >>

Bấm Liên kết đến thư mục trong hệ thống tập tin Nhấp vào các biến số ... để hiển thị Chọn Biến số đường dẫn đối thoại.

Nếu đây là lần đầu tiên bạn hoặc bạn đang liên kết đến một vị trí mới, hãy chọn Mới ... và đặt biến cho một tên và đường dẫn hợp lý. Nếu tất cả các dự án của bạn nằm trong số c: \ workspaces \ foo ** thì cần gọi biến ** WORKSPACE_ROOT và cung cấp cho nó đường dẫn đó. Nếu bạn có một số quy ước khác là tốt, nhưng nó có ý nghĩa để đặt một bình luận trong tệp .project để ai đó có cơ hội tìm ra giá trị chính xác nào.

Giả sử các giá trị ở trên bây giờ bạn có thể đặt một giá trị của WORKSPACE_ROOT/[subject tên dự án]/src trên các lĩnh vực đầu vào

Khi bạn xác nhận rằng bạn sẽ thấy thư mục src với một mũi tên nhỏ, và nếu bạn nhìn vào tệp .project, hãy xem nội dung như sau:

<linkedResources> 
    <link> 
     <name>src</name> 
     <type>2</type> 
     <locationURI>WORKSPACE_ROOT/esf-ns-core-rp/src</locationURI> 
    </link><!--NOTE the WORKSPACE_ROOT variable points to the folder containing the subject project's sandbox--> 
</linkedResources> 

Bây giờ bạn có thể thêm thư mục src/test/java làm vị trí nguồn như bình thường.

Lưu ý bạn cũng có thể chia sẻ chỉ thư mục src/kiểm tra/java bằng cách thay đổi cấu hình để một cái gì đó như thế này:

<linkedResources> 
    <link> 
     <name>src/test/java</name> 
     <type>2</type> 
     <locationURI>WORKSPACE_ROOT/my-project/src/test/java</locationURI> 
    </link> 
</linkedResources> 

Điều này cho phép kiểm soát tốt hơn các cấu hình, nhưng bạn sẽ phải lặp lại cho src/kiểm tra/tài nguyên, src/it/java, v.v.

Sau đó, bạn chỉ đặt tất cả các phụ thuộc thử nghiệm trong dự án thử nghiệm.

Rất không đẹp, nhưng nó hoạt động (tôi cũng đã sử dụng mức độ tuân thủ thử nghiệm của mình khác với mức tuân thủ chính, ví dụ 1.5 cho thử nghiệm, nhưng 1.4 cho môi trường đích).

+0

Tôi đang làm điều này trong một ứng dụng lớn, được phát triển bởi nhiều người. Tôi hy vọng rằng chúng ta có thể di chuyển sang Maven sớm, do đó tôi sẽ không bận tâm đến những thủ thuật bẩn thỉu (có thể được gỡ bỏ khi chúng ta đang ở trên Maven/M2Eclipse), nhưng thay đổi cấu trúc dự án mà không nằm ngoài phạm vi tại thời điểm này. –

+0

Tôi không biết sao chép một số phần câu trả lời của bạn trong tôi (http://stackoverflow.com/questions/1470827/external-output-folder-in-eclipse/1470833#1470833), vì vậy +1;) – VonC

0

Thực ra nếu bạn nhìn vào nhật thực như cách Maven tích hợp các phụ thuộc, nó sẽ không tạo sự khác biệt trong kiểm tra hoặc phụ thuộc thời gian chạy mà thư viện kiểm tra của bạn luôn có thể truy cập được.

Maven sẽ giữ sự khác biệt khi đóng gói ứng dụng và khi tạo đường dẫn lớp thời gian chạy nếu maven có quyền kiểm soát việc thực hiện phần đó. Khi nhật thực có liên quan, Maven chỉ đơn giản là thêm tất cả chúng mà không có câu hỏi cho đường dẫn xây dựng nhật thực.

Tại sao bạn cần phải tách riêng điều này? Điều này sẽ giúp bạn đạt được điều gì?

+3

Điều này giống như bạn mô tả nếu bạn không sử dụng plugin M2Eclipse. Nhưng với các plugin được cài đặt, các phạm vi phụ thuộc thực sự được thực thi. Tôi cần sự tách biệt này vì tôi muốn sử dụng các triển khai ghi nhật ký riêng biệt để thử nghiệm và trong thời gian chạy. Khi SLF4J sử dụng SPI để xác định vị trí thực hiện thực tế, tôi không nghĩ rằng việc thêm hai người trong số họ trên classpath sẽ là một ý tưởng hay. –

+0

Tôi đoán người xây dựng maven có nhiều phép thuật hơn quảng cáo sau đó. Cũng dựa trên những gì tôi thấy ở đây lựa chọn tốt nhất của bạn bây giờ (cho đến khi bạn nhận được Maven) sẽ được để hack cấu trúc dự án của bạn như Rich nêu dưới đây trong khi vẫn giữ cấu trúc thư mục của bạn còn nguyên vẹn. Trong trường hợp này, nếu không phải như vậy, bạn cũng có thể bắt đầu ngay lập tức để thực thi quy ước bố cục maven, điều này sẽ dễ dàng chuyển đổi sau này. – Newtopian

+0

Tôi đã không nhận thức được thư viện SLF4J ... cảm ơn .. Tôi sử dụng để tạo wrapper của riêng tôi mặc dù nhu cầu của tôi là khiêm tốn tôi không bao giờ tìm kiếm các giải pháp khác. thanks – Newtopian

1

Kể từ khi bạn sử dụng cả Eclipse và Maven bạn có thể workaround nó. Tạo cấu hình chạy "Maven Build" mới với mục tiêu "exec: java" và thông số "exec.mainClass = com.example.Starter". Bằng cách này, classpath sẽ được Maven tính toán.

+0

Đó là một câu trả lời 4 năm tuổi, nhưng tôi đang sử dụng STS 3.6.4 (Luna 4.4.2) và nó có vấn đề và cách giải quyết này là rất tốt. Trong các thử nghiệm của tôi, tôi có một dummy @Service thực hiện giao diện giống như giao diện thực, và khi các gói nhật thực trong các lớp thử nghiệm, Spring không thể chọn thực hiện dịch vụ nào để sử dụng. "đậu phù hợp duy nhất dự kiến ​​nhưng tìm thấy 2." – Jim

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