Có cách nào được thiết lập tốt để chia sẻ mục tiêu Ant giữa các dự án không? Tôi có một giải pháp hiện tại, nhưng đó là một chút không thích hợp. Đây là những gì tôi đang làm cho đến nay.Làm thế nào tôi có thể chia sẻ tốt nhất các mục tiêu Ant giữa các dự án?
Tôi có một tệp có tên là ivy-tasks.xml
được lưu trữ trên máy chủ trên mạng của chúng tôi. Tệp này chứa trong số các mục tiêu khác, các tác vụ soạn sẵn để quản lý các phụ thuộc dự án với Ivy. Ví dụ:
<project name="ant-ivy-tasks" default="init-ivy"
xmlns:ivy="antlib:org.apache.ivy.ant">
...
<target name="ivy-download" unless="skip.ivy.download">
<mkdir dir="${ivy.jar.dir}"/>
<echo message="Installing ivy..."/>
<get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
dest="${ivy.jar.file}" usetimestamp="true"/>
</target>
<target name="ivy-init" depends="ivy-download"
description="-> Defines ivy tasks and loads global settings">
<path id="ivy.lib.path">
<fileset dir="${ivy.jar.dir}" includes="*.jar"/>
</path>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant"
classpathref="ivy.lib.path"/>
<ivy:settings url="http://myserver/ivy/settings/ivysettings-user.xml"/>
</target>
...
</project>
Lý do tập tin này được lưu trữ là vì tôi không muốn:
- Kiểm tra các tập tin vào mỗi dự án mà cần nó - điều này sẽ dẫn đến sự trùng lặp, làm cho duy trì các mục tiêu khó hơn.
- Việc build.xml của tôi phụ thuộc vào việc kiểm tra dự án từ điều khiển nguồn - điều này sẽ làm cho bản dựng có thêm XML ở cấp cao nhất chỉ để truy cập tệp.
Những gì tôi làm với tập tin này trong build.xmls dự án của tôi nằm dọc theo dòng:
<property name="download.dir" location="download"/>
<mkdir dir="${download.dir}"/>
<echo message="Downloading import files to ${download.dir}"/>
<get src="http://myserver/ivy/ivy-tasks.xml" dest="${download.dir}/ivy-tasks.xml" usetimestamp="true"/>
<import file="${download.dir}/ivy-tasks.xml"/>
Các 'bẩn' một phần về việc này là tôi phải làm các bước trên ngoài của một mục tiêu, bởi vì import task phải ở cấp cao nhất. Ngoài ra, tôi vẫn phải bao gồm XML này trong tất cả các tệp build.xml cần nó (tức là vẫn còn một số lượng trùng lặp).
Ngoài ra, có thể có thêm các tình huống mà tôi có thể có các tác vụ phổ biến (không phải Ivy) mà tôi muốn nhập. Nếu tôi cung cấp các nhiệm vụ này bằng cách sử dụng quản lý phụ thuộc của Ivy, tôi vẫn gặp vấn đề, vì lúc đó tôi đã giải quyết các phụ thuộc, tôi phải nằm trong một mục tiêu trong tệp build.xml của mình và không thể nhập (do với ràng buộc nêu trên).
Có giải pháp nào tốt hơn cho những gì tôi đang cố gắng hoàn thành không?
Tôi gặp khó khăn tương tự. Tôi chỉ cần làm rất nhiều bản sao và dán :). –