Chúng tôi gặp vấn đề tại nơi tôi làm việc với việc tham chiếu nhiều dự án trong mã của chúng tôi. Về cơ bản, chúng tôi có một sản phẩm, mà tôi sẽ gọi là Leviathan. Dự án này có khá nhiều phiên bản khác, mỗi phiên bản mà chúng tôi duy trì như là các dự án riêng biệt trong Eclipse. Là nhà phát triển, chúng tôi thường có nhiều dự án (nhiều phiên bản) mở cùng lúc với Eclipse, vì chúng tôi nhận được các cuộc gọi đường dây trợ giúp về các phiên bản cũ hơn (cũng như phát triển đồng thời nhiều phiên bản).Làm thế nào tôi có thể tham khảo các thư viện trong một dự án khác trong Eclipse Helios?
Chúng tôi cũng có mã kiểm tra, trong một dự án khác nhau cho mỗi phân phối của Leviathan. Tôi tên dự án của tôi Leviathan_<branch name>
. Vì vậy, ví dụ, trong không gian làm việc Eclipse của tôi, tôi có thể có các dự án như:
Leviathan_scott\ (my branch) Leviathan_9.2\ Leviathan_9.3\ Leviathan_10.0\ Leviathan_10.1\ Test_scott\ Test_10.0
chi nhánh của tôi là một bản sao của thân cây của chúng tôi, vì vậy chúng tôi có thể xem xét rằng dòng phát triển tích cực nhất.
Vấn đề là chúng tôi tham khảo một số thư viện trong Leviathan \ lib trong mã thử nghiệm của chúng tôi. Mỗi nhà phát triển có thể đặt tên cho dự án của họ hơi khác nhau. Vì vậy, trong việc phát triển .classpath của dự án thử nghiệm, chúng tôi tham khảo dự án Leviathan \ (không bổ sung). Classpath cho dự án này (được kiểm tra vào hệ thống kiểm soát nguồn của chúng tôi) có thể trông giống như:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry excluding="**/*.MySCMServerInfo" kind="src" path="src"/>
<classpathentry kind="lib" path="lib/abbot-1.0.2/abbot.jar"/>
<classpathentry kind="lib" path="lib/abbot-1.0.2/costello.jar"/>
<classpathentry kind="lib" path="lib/dbunit-2.4.8/dbunit-2.4.8.jar"/>
<classpathentry kind="lib" path="lib/easymock-3.0/easymock-3.0.jar" sourcepath="lib/easymock-3.0/easymock-3.0-sources.jar">
<attributes>
<attribute name="javadoc_location" value="jar:platform:/resource/Test/lib/easymock-3.0/easymock-3.0-javadoc.jar!/"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/objenesis-1.2/objenesis-1.2.jar"/>
<classpathentry kind="lib" path="lib/privilegedAccessor-1.0.2/privilegedAccessor_1.0.2.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-core/unitils-core-3.1.jar" sourcepath="lib/unitils-3.1/unitils-core/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-database/unitils-database-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-dbmaintainer/unitils-dbmaintainer-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-dbunit/unitils-dbunit-3.1.jar" sourcepath="lib/unitils-3.1/unitils-dbunit/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-inject/unitils-inject-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-mock/unitils-mock-3.1.jar" sourcepath="lib/unitils-3.1/unitils-mock/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-orm/unitils-orm-3.1.jar"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-spring/unitils-spring-3.1.jar" sourcepath="lib/unitils-3.1/unitils-spring/src"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-testng/unitils-testng-3.1.jar" sourcepath="lib/unitils-3.1/unitils-testng/src"/>
<classpathentry kind="lib" path="data"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/unitils-3.1/unitils-core/lib/ognl-2.6.9.jar"/>
<classpathentry kind="lib" path="lib/testng-5.14.1/testng-5.14.1.jar" sourcepath="lib/testng-5.14.1/testng-5.14.1-src.zip"/>
<classpathentry combineaccessrules="false" kind="src" path="/Leviathan"/>
<classpathentry kind="lib" path="/Leviathan/lib/slf4j-api-1.6.1.jar"/>
<classpathentry kind="lib" path="/Leviathan/lib/hibernate3.jar" sourcepath="/Leviathan/lib/src/hibernate-3.6.0-src.zip"/>
<classpathentry kind="output" path="classes"/>
</classpath>
Khi một nhà phát triển tải dự án thử nghiệm vào/workspace Eclipse cá nhân của mình, anh/cô ấy sẽ cần phải liên kết dự án cho dự án Leviathan ban đầu bằng cách vào Preference-> Java Build Path-> Projects và thêm dự án Leviathan_scott.
Vấn đề là, điều này tất nhiên không thay đổi bất kỳ mục nhập nào trong số <classpathentry ... >
tham chiếu đến "Leviathan \ lib". Vì vậy, chúng ta phải làm một trong hai điều:
- Thay đổi tất cả các tài liệu tham khảo từ
Leviathan
đểLeviathan_<branch name>
trong classpath của tôi sử dụng một trình soạn thảo văn bản tìm/thay thế. - Xóa tất cả các tham chiếu đến Leviathan * .jar trong Đường dẫn xây dựng Java và thêm lại các lọ trong Leviathan_scott * .jar.
Vấn đề với điều này là cần phải thực hiện mỗi lần .classpath được thay đổi, điều này làm cho cả hai điều này có vẻ ít lý tưởng. Classpath của chúng tôi không thay đổi siêu thường xuyên, nhưng tôi sẽ nói rằng nó thay đổi một hoặc hai lần mỗi hai tuần. Tôi muốn có thể liên kết dự án của mình và chỉ phải thực hiện một bước để liên kết các dự án này.
Dường như chúng ta có thể thiết lập một biến môi trường trong Eclipse và thêm nó vào các mục .classpath. Nhưng, bây giờ chúng tôi có một vấn đề bởi vì nếu chúng tôi có nhiều dự án thử nghiệm trong không gian làm việc của chúng tôi mà chúng tôi muốn biên dịch, điều này sẽ không hoạt động. Cả hai mục .classpath của dự án thử nghiệm sẽ tham chiếu đến cùng một biến môi trường, tất nhiên chỉ có thể trỏ đến một vị trí siêu dự án.
Có vẻ như tôi có thể làm điều này, nhưng tôi không biết chính xác cách thực hiện nó trong Eclipse. Bất kỳ suy nghĩ sẽ được đánh giá rất cao.
~ Scott
Apache Maven phân loại những vấn đề như quyến rũ. –
Đồng ý, nhưng rất khó để có được 20 nhà phát triển chuyển sang hệ thống xây dựng mới ... Nếu chúng tôi * hoàn toàn * phải, tôi có thể tạo ra trường hợp đó, nhưng nếu có thể làm được, thì tôi muốn hoàn thành nó theo cách đó. – jwir3