1. 程式人生 > >用Ant-Ivy來做類似Maven的包管理

用Ant-Ivy來做類似Maven的包管理

If: 你要準備建立新專案,那就直接上Maven吧!

Else: 如果你手頭上的專案正在用Ant工具,你可以考慮用Ant-Ivy來做類似Maven的依賴(包)管理。這個工具還有衍生的IvyDE外掛來方便你使用Eclipse開發環境。下面例子將演示設定基本的Ant-Ivy環境。

建立用Ant管理的專案

建立的工程結構如下

<pre name="code" class="plain">.
├── build.xml
├── ivy.xml
├── lib
│   └── ivy-2.4.0.jar
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── yiyeguhu
    │               └── example
    │                   └── antivy
    │                       └── DateUtils.java
    └── test
        └── java
            └── com
                └── yiyeguhu
                    └── example
                        └── antivy

定義Ivy任務

首先,你需要從Apache Ivy下載ivy*.jar包,將它放在如本例所示的“./lib”路徑下。

在build.xml中定義Ivy任務,而之後將用到:

<pre name="code" class="html"><path id="ivy.jar.file">
    <fileset dir="./lib">
        <include name="ivy*.jar" />
    </fileset>
</path>
 
<taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.jar.file"/>

解析專案依賴

在ivy.xml中以類似Maven包管理的方式定義你的專案依賴項。比如,你想要在你的工程中包含commons-lang3包。相關資訊網頁顯示如下Maven依賴項屬性:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.0</version>
</dependency>

你只需要將“groupId”、“artifactId”、“version”分別轉譯成“org”、“module”、“rev”。其實,
commons-lang3
資訊網頁也顯示了Ivy的依賴項表達。在本例中,我們將在ivy.xml中這樣表達依賴:
<ivy-module version="2.0">
    <info organisation="org.apache" module="dateUtilsProject" />
    <dependencies>
        <dependency org="org.apache.commons" name="commons-lang3" rev="3.4" />
    </dependencies>
</ivy-module>

我們再在build.xml定義一個Ant目標來做最後的解析工作。

<target name="resolve" description="--> retrieve dependencies with ivy">
    <ivy:retrieve pattern="${lib.dir}/[organisation]/[type]/[artifact]-[type]-[revision].[ext]" />
</target>

其他

依賴解析完成之後,我們的Java程式碼就可以import “org.apache.commons.lang3“中的方法了。

package main.java.com.yiyeguhu.example.antivy;
 
import java.util.Date;
 
import org.apache.commons.lang3.StringUtils;
 
public class DateUtils {
    public static void main(String[] args) {
 
        System.out.println(getLocalCurrentDate());
 
        String someWhiteSpace = "    \t  \n";
        boolean result = StringUtils.isBlank(someWhiteSpace);
        System.out.println(result);
 
    }
 
    private static Date getLocalCurrentDate() {
        return new Date();
    }
}

工程的其他部分包括一些常規的Ant目標來編譯和打jar包。

最後,我們只需執行“ant”命令來建jar包!

Github示例連結

參考資料