0

我是 Ant 的新手(我来自 Maven,此时,Ant 是我的噩梦)。

我有以下情况:

在 Eclipse 工作区中,我有一些 Java 项目,它们相互交互组成最终的单个应用程序。

这个实现应用程序 GUI 的项目之一(名为CrystalIceGUI)本身包含独特的build.xml Ant 脚本,最多简化,执行以下操作:

1)编译所有项目(被视为 CrystalIceGUI 项目的依赖项)

2) 为每个项目创建一个名为Release的目录(在适当的项目中)并将与该项目相关的.jar文件放入其中。(例如其中一个项目名为ShellExtBridge,因此 Ant 脚本将创建以下目录:ShellExtBridge/Release并将创建的ShellExtBridge的.jar文件放在该目录中。

3)最后为主工程(CrystalIceGUI )创建如下结构:在CrystalIceGUI工程中创建一个名为Relaese的目录在该目录下放置CrystalIceGUI工程相关的.jar文件

此外,创建此目录CrystalIceGUI/Release/lib,其中包含之前为依赖项目创建的所有.jar 。

现在我的问题是:老板要求我为每个项目创建一个 Ant 脚本。这些 Ant 脚本只需在每个项目中创建一个Release文件夹,为项目创建 jar 并将 jar 放入此 Release 文件夹中。但是我对如何做有点困惑。

我的想法是这样的:对于每个项目,我从旧的 Ant 脚本(执行主项目中所有工作的脚本)中获取与我正在处理的项目相关的部分。

例如,对于之前名为ShellExtBridge的子项目:我从旧的build.xml ant 脚本中获取这部分代码:

<target name="shellextbridge" 
    description="Packs classes of shellextbridge">
    <mkdir dir="${project.libdir}" />
    <javac srcdir="${deps.shellextbridge.dir}/Project/src" destdir="${deps.shellextbridge.dir}/Project/bin"/>
    <jar destfile="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" index="false">
        <fileset dir="${deps.shellextbridge.dir}/Project/bin"/>
        <manifest>
            <attribute name="Created-By" value="${info.software.author}" />
            <attribute name="Main-Class" value="com.techub.crystalice.rmi.Main"/>
        </manifest>
    </jar>
    <copy file="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" tofile="${project.libdir}/${deps.shellextbridge.jar}"/>
    <copy file="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" tofile="${project.deploy}/lib/${deps.shellextbridge.jar}"/>
    <copy file="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" tofile="${project.dev.deploy.dir}/${deps.shellextbridge.jar}"/>
</target>

我将它放入一个新的build.xml ant 脚本中,该脚本特定于ShellExtBridge项目(更改路径)

可以很好地解决他们问我的问题吗?

对不起,如果我住过,但直到昨天才见过蚂蚁,我对如何行动有很多疑问

肿瘤坏死因子

安德烈亚

4

2 回答 2

1

来自 Maven,您已经习惯了标准的项目源代码布局,您也会熟悉构建插件。

首先,我建议识别常见的构建逻辑部分并考虑创建一组 ANT宏定义。接下来研究如何创建一个ANTlib来保存构建的宏定义。这将是一个 jar 文件,可以包含在每个构建中,包含通用构建逻辑。

最后,如果您决定将通用逻辑保存在 ANTLIB 中,这意味着您可以支持构建版本控制,模拟 Maven 如何支持不同版本的构建插件。在您需要在不破坏旧版本的情况下进行更改的情况下非常有用。

有关更多详细信息,请参阅以下答案:

于 2013-10-08T20:01:13.637 回答
0

关于定义通用构建逻辑;在多个项目中重用它;并在 Ant 中定义常见的构建阶段,我建议您看看 Netbeans 如何设置其项目。这将使您对 build.xml 重用有一个足够的了解。

假设您从确定 5 个阶段开始 - clean、init、build、dist、release(等)。您可以创建一个基本文件(可能位于 $root.dir/build/common.xml)。在此文件中,您可以继续创建将调用目标的序列。

现在,如果您查看 Netbeans 如何设置项目,您会注意到一个目标(比如构建)会调用目标-pre-build、-do-build、-post-build。实际上,所有实际代码都存在于这些附加目标中。这样做的好处是在单个模块中(这个 common.xml 已经被导入)你可以只覆盖那些需要特殊处理的构建部分。

这样,您可以将每个项目单独移动到模块化构建系统。

一旦您运行了基本脚本,那么您可能会考虑利用 Ivy(依赖管理)等库来处理打包等。

或者,如果您计划将事物转移到可扩展和模块化的系统,那么我也建议您使用 Gradle——这是一个 Ant 友好、基于 Java 的构建平台。我建议这样做的原因是,您最终将构建自定义任务或做一大堆杂耍来满足小需求……您可能可以通过脚本代码做得更好。

希望这对您有所帮助。

于 2013-10-08T20:16:55.053 回答