2009-11-19 26 views
6

Tôi có một ivy.xml khá lớn chứa một số cấu hình giống nhau đối với một số dự án.Làm cách nào để đưa tệp vào ivy.xml?

Tôi muốn chia nhỏ phần lặp lại lớn này thành tệp bao gồm chung. Bằng cách nào đó tôi không thể tìm thấy bất kỳ tài liệu nào mô tả rằng điều này có thể được thực hiện.

Bất kỳ ai có ý tưởng cho dù điều này có thể thực hiện được không?

EDIT: Sau khi suy nghĩ thêm, tôi nghĩ rằng điều này không thể thực hiện được. Tệp Ivy có nghĩa là một đơn vị cố kết và không chứa tham chiếu dựa trên tệp, chỉ tham chiếu đến các mô-đun ivy khác ...

Trả lời

9

Bạn có thể tạo một ivy meta-mô-đun, mà phụ thuộc khi tất cả những gói thông thường, và sau đó có tất cả các dự án khác của bạn giải quyết các thư viện chung thông qua sự phụ thuộc bắc cầu:

<?xml version="1.0"?> 
    <ivy-module version="2.0"> 
     <info organisation="com.example" module="common-libs"/> 
      <configurations> 
      <conf name="runtime" transitive="true" visibility="public" /> 
      <conf name="master" transitive="true" visibility="public" /> 
      <conf name="compile" transitive="true" visibility="public" /> 
      <conf name="default" transitive="true" visibility="public" extends="master" /> 
      </configurations> 
      <dependencies> 
       <dependency org="oracle" name="ojdbc14_g" rev="10.2.0.3" 
conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
       <dependency org="tomcat" name="servlet-api" rev="6.0.16" 
conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
       <dependency org="junit" name="junit" rev="4.3" 
conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
      </dependencies> 
    </ivy-module> 

và đối với một dự án tiêu biểu:

<?xml version="1.0"?> 
    <ivy-module version="2.0"> 
    <info organisation="com.example" module="myproject"/> 
     <configurations> 
     <conf name="runtime" transitive="true" visibility="public" /> 
     <conf name="master" transitive="true" visibility="public" extends="runtime"/> 
     <conf name="compile" transitive="true" visibility="public" /> 
     <conf name="default" transitive="true" visibility="public" extends="master" /> 
     </configurations> 
     <dependencies> 
     <dependency org="com.example" name="common-libs" rev="latest.release" 
      conf="compile->compile(*),master(*);runtime->runtime(*);master->master(*)"/> 
     </dependencies> 
    </ivy-module> 

Ở đây tôi đang sử dụng các quy ước đặt tên cấu hình truyền thống từ bản dịch POM-> Ivy của trình giải quyết Maven, mặc dù bạn có thể ánh xạ tên cấu hình theo bất kỳ cách nào có ý nghĩa với bạn. Tôi có xu hướng sử dụng tác vụ ivy: install để sao chép các mô-đun Maven vào kho lưu trữ Ivy của chúng tôi, vì vậy tôi sử dụng các ivy.xml mặc định cho hầu hết các phần. Nếu bạn đang sử dụng IvyRoundup, bạn sẽ chủ yếu muốn ánh xạ cấu hình "mặc định" quá mức.

2

Nếu bạn đang sử dụng ivy từ kiến ​​và bạn đang chạy Ant 1.6 hoặc mới hơn, bạn có thể sử dụng nhiệm vụ <import> để bao gồm các đoạn tệp xây dựng trong tệp xây dựng kiến ​​của bạn. Các tập tin tham chiếu phải được hoàn thành Ant xây dựng tác phẩm, mặc dù:

<?xml version="1.0"?> 
<project name="my-project" default="usage" basedir="."> 
    <target name="setup"> 
    ... 
    </target> 

    <import file="./common.xml"/> 
    ... 
</project> 

Bạn cũng có thể sử dụng cú pháp XML tiêu chuẩn từ bên trong ivy.xml hoặc build.xml bạn file:

<?xml version="1.0"?> 
<!DOCTYPE project [ 
     <!ENTITY common SYSTEM "common.xml"> 
]> 
<project name="my-project" default="usage" basedir="."> 
    <target name="setup"> 
    ... 
    </target> 

    &common; 
    ...  
</project> 

này theo nghĩa đen sẽ bao gồm các nội dung của common.xml nơi bạn đã đặt thực thể &common;.

(The filename common.xml trong ví dụ này được giải quyết liên quan đến các tập tin XML chứa bởi các phân tích cú pháp XML. Bạn cũng có thể sử dụng một tuyệt đối file: giao thức URI.)

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