2011-01-11 35 views
12

Tôi có một vấn đề phổ biến và có lẽ vô số cách để giải quyết nó. Tôi đang tìm kiếm một giải pháp đơn giản, thanh lịch cho kịch bản điển hình này:Làm thế nào để thiết lập các thuộc tính Ant dựa trên các biến trong Eclipse?

Tôi có một dự án trong Eclipse với tệp xây dựng Ant (build.xml) tệp xây dựng sử dụng tệp thuộc tính (build.properties). Trong đó tập tin bất động sản, tôi muốn thiết lập một tài sản trỏ đến thư mục gốc của dự án nhật thực như:

project.root = /path/to/eclipse/workspace/projectName 

hoặc tốt hơn là:

project.root = ${path.to.eclipse.workspace}/projectName 

Làm thế nào để làm điều này theo cách như vậy rằng:

  1. Hoạt động trên các máy khác nhau với những con đường khác nhau vào thư mục gốc của dự án (tức là trong một môi trường đồng đội)
  2. cho phép file build.xml kiến ​​là exe cắt bên trong nhật thực
  3. Cho phép tệp ant build.xml được thực thi bên ngoài nhật thực (tức là từ dòng lệnh)
  4. Cho phép tệp build.properties để tồn tại trong một thư mục khác so với gốc của dự án
+0

Tôi thậm chí muốn giải quyết cho một giải pháp phần mà tao nhã giải quyết mối quan tâm # 1 và # 2. Số 3 và 4 khó khăn hơn nhiều. – gMale

Trả lời

7

Tôi nghĩ rằng những gì tôi đang tìm kiếm là để thêm dòng sau vào các build.properties file:

project.root = ${basedir} 

cách khác, tôi chỉ có thể sử dụng basedir sở hữu bất cứ khi nào project.root là cần thiết .

Tôi tình cờ nhìn vào số source code for ivy.properties và tôi thấy thuộc tính basedir đang được sử dụng. Tôi chỉ kiểm tra và xác minh rằng thuộc tính này hoạt động trên các máy khác nhau cả từ bên trong nhật thực và từ dòng lệnh cũng như khi thực hiện một cuộc gọi đến kiến ​​từ một thư mục khác nhau như:

ant -f /path/to/eclipse/workspace/projectName/build.xml 

Khi tôi nhận được một phút, Tôi sẽ xác minh rằng điều này cũng hoạt động khi nhập tệp thuộc tính ở các vị trí khác nhau (chẳng hạn như bên trong src/main/resources/config/ivy/ivysettings.xml).

+0

Cảm ơn, đã giúp tôi. –

8

Xem Window -> Preferences -> Ant -> Runtime -> Properties để xác định thuộc tính tùy chỉnh kiến ​​nên đó có sẵn cho bất kỳ kịch bản kiến ​​nào được gọi ra từ Eclipse. Đơn giản đặt cùng một thuộc tính theo cách thủ công khi gọi kịch bản từ dòng lệnh.

Tệp build.properties của bạn có thể tồn tại ở bất cứ nơi nào bạn muốn. Sử dụng các thiết bị Ant thông thường để nhập nó vào tập lệnh của bạn.

+0

Cảm ơn bạn đã dành thời gian trả lời. Thật không may, phản hồi của bạn không trực tiếp giải quyết bất kỳ vấn đề nào ở trên vì 1) các thuộc tính thời gian chạy ant không chứa một mục nhập cho đường dẫn gốc của dự án. Tôi đoán tôi có thể thêm $ {workspace_loc} hoặc một cái gì đó tương tự như danh sách các thuộc tính nhưng điều này sẽ không làm việc bên ngoài nhật thực. 2) thiết lập một thuộc tính thủ công khi gọi kịch bản lệnh từ dòng lệnh không mở rộng tốt với môi trường nhóm. 3) Cuối cùng, khi tệp thuộc tính được nhập khẩu, các đường dẫn tương đối có thể thay đổi để các đường dẫn tuyệt đối được yêu cầu, đó là một vấn đề. – gMale

3

Đối với kiến ​​trúc dự án của tôi.

ProjectName <dir> 
|_ ant <dir> 
    |_ ant.xml 

trường hợp của bạn chỉ có thể chỉ đơn giản là thay đổi tập tin xml kiến, các <project default="main" basedir="../"/>

Sau đó, tôi có thể nhận được gốc của dự án sử dụng biến

ví dụ<echo message= "Project Root: ${basedir}" />

3

nếu bạn cần nhiều hơn những thứ tầm thường basedir =
Ant4Eclipse - một loạt các nhiệm vụ kiến ​​để truy cập vào eclipse cấu hình từ bên trong ant -
có thể giúp bạn. Chỉ cần sử dụng nó như là hoặc grep mã và chọn những phần liên quan ..

+0

Cảm ơn, tôi sẽ xem xét điều này. Nghe có vẻ hữu ích. – gMale

1

Bạn có thể đặt làm lu mờ tính chất tương đối ANT xây dựng của bạn từ nhật thực

Đến tính Builder ANT của bạn và trong phần tranh luận, bạn có thể thiết lập các thuộc sử dụng -D như bên dưới

-Dworkspace="${workspace_loc}" -Dproject_dir="${project_loc}" 

(đây là workspace_loc và project_loc là các biến nhật thực). Các tính chất này có thể được truy cập trong ANT xây dựng của bạn kịch bản như tính chất thường xuyên, ví dụ:

<echo message="${workspace}" /> 
<echo message="${project_dir}" /> 

reference screenshot

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