我对Ant非常陌生(我来自Maven),我发现了很多问题来做下面的操作。
我有一个名为CrystalIceGUI主项目,它使用了另一个名为ShellextBridge的依赖项项目。
依赖项目ShellExtBridge有一个自己的build.xml文件,该文件编译项目并将其打包到一个jar文件中,该jar文件被插入名为Release的direcotry中
主项目CrystalIceGUI有它的build.xml ant文件,其中包含一个名为init的目标,该目标尝试执行ShellExtBridge depency项目的build.xml文件来构建这个项目,然后在另一个目标中使用它的jar。
问题是,如果我执行ShellExtBridge的build.xml ant脚本,它工作得很好,并且jar文件被正确地创建到其发布目录中(所以我认为这个ant脚本是可以的),但是如果我从主项目的build.xml调用它,它会给我带来一长串错误。
这是ShellExtBridge依赖项项目的build.xml:
<?xml version="1.0"?>
<project default="default">
<!-- ============================================ -->
<!-- Load build properties -->
<!-- ============================================ -->
<property name="project.buildfile" value="build.num" />
<property file="${project.buildfile}" />
<property file="info.properties" />
<!-- ============================================ -->
<!-- The default target -->
<!-- ============================================ -->
<target name="default" depends="jar" />
<!-- Elimina le cartelle contenenti le classi compilate ed i jar -->
<target name="clean">
<echo message="Into ShellExtBridge build.xml clean target"/>
<delete dir="../Release" />
<!-- Elimina directory del jar finale -->
<delete dir="bin" />
<!-- Elimina directory delle classi compilate -->
</target>
<!-- Contiene i task di COMPILAZIONE:
1) Crea la directory "bin/" nel progetto
2) Compila tutte le classi dentro la cartella "src" del progetto e mette i risultanti .class
dentro "bin"
-->
<target name="compile" depends="clean">
<echo message="Into ShellExtBridge build.xml compile target"/>
<mkdir dir="bin" />
<javac srcdir="src" destdir="bin" />
</target>
<target name="jar" description="Packs classes of shellextbridge" depends="compile">
<echo message="Into ShellExtBridge build.xml jar target"/>
<jar destfile="../Release/shellExtBridge.jar" index="false">
<fileset dir="bin" />
<manifest>
<attribute name="Created-By" value="${info.software.author}" />
<attribute name="Main-Class" value="com.techub.crystalice.rmi.Main" />
</manifest>
</jar>
</target>
</project>
这是主项目CrystaliceGUI的build.xml文件的init目标:
<target name="init">
<ant antfile="${basedir}../../../ShellExtBridge/Project/build.xml" />
</target>
如果我去执行这个ant脚本的init目标,我会得到以下错误:
Buildfile: /home/andrea/Documenti/XCloud/Implementazione/CrossPlatform/CrystalIceGUI/Project/build.xml
init:
clean:
[echo] Into ShellExtBridge build.xml clean target
[delete] Deleting directory /home/andrea/Documenti/XCloud/Implementazione/CrossPlatform/CrystalIceGUI/Project/bin
compile:
[echo] Into ShellExtBridge build.xml compile target
[mkdir] Created dir: /home/andrea/Documenti/XCloud/Implementazione/CrossPlatform/CrystalIceGUI/Project/bin
[javac] /home/andrea/Documenti/XCloud/Implementazione/CrossPlatform/ShellExtBridge/Project/build.xml:37: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 117 source files to /home/andrea/Documenti/XCloud/Implementazione/CrossPlatform/CrystalIceGUI/Project/bin
[javac] /home/andrea/Documenti/XCloud/Implementazione/CrossPlatform/CrystalIceGUI/Project/src/com/techub/crystalice/utils/QuickLocale.java:8: package org.apache.log4j does not exist
[javac] import org.apache.log4j.Logger;
[javac] ^
[javac] /home/andrea/Documenti/XCloud/Implementazione/CrossPlatform/CrystalIceGUI/Project/src/com/techub/crystalice/fuse/AtmosFuseWrapper.java:8: package org.apache.log4j does not exist
[javac] import org.apache.log4j.Logger;
[javac] ^
[javac] /home/andrea/Documenti/XCloud/Implementazione/CrossPlatform/CrystalIceGUI/Project/src/com/techub/crystalice/fuse/AtmosFuseWrapper.java:11: package com.techub.crystalice.jaxb.settings does not exist
[javac] import com.techub.crystalice.jaxb.settings.DriveType;
[javac]
...............................................................................
...............................................................................
ETCETCETC MANY OTHERS SIMILAR ERRORS
...............................................................................
...............................................................................
BUILD FAILED
/home/andrea/Documenti/XCloud/Implementazione/CrossPlatform/CrystalIceGUI/Project/build.xml:70: The following error occurred while executing this line:
/home/andrea/Documenti/XCloud/Implementazione/CrossPlatform/ShellExtBridge/Project/build.xml:37: Compile failed; see the compiler error output for details.
正如您所看到的,调用依赖项ShellExtBridge项目的build.xml ant脚本是因为显示了该ant脚本的回显消息。
[echo]到ShellExtBridge build.xml清除目标[delete]删除目录/home/andrea/documenti/xcloud/implementazione/crossplatform/crystaliceGui/project/bin编译:[echo]到ShellExtBridge build.xml编译目标[mkdir]创建dir:/home/andrea/documenti/xcloud/implementazione/crossplatform/crystaliceGui/project/bin为可重复生成设置为false
它删除了这个目录/home/andrea/documenti/xcloud/implementazione/crossplatform/crystaliceGui/project/bin,而不是与ShellExtBridge项目中的bin目录相关的正确目录。
似乎是这样的,当它调用ShellExtBridge项目的ant文件时,丢失了它的引用,并且在主项目的文件夹上执行操作,而不是在正确项目的文件夹上执行操作。
你有解决它的想法吗?
我觉得修起来挺简单的。
任务将使用当前目录作为工作目录,除非指定dir
属性(此外,如果要运行的目标文件名为build.xml,则可以省略antfile属性)。
因此,这里是我建议的init目标:
<target name="init">
<ant dir="${basedir}../../../ShellExtBridge/Project" />
</target>
下面是关于dir属性的官方文件:
问题内容: 在定义顺序构建步骤时,我使用元素的属性。我最近看到了一个ant文件,其中的构建顺序是由目标内部的元素定义的。为了显示 : 与 两种方法之间是否有真正的区别?是其中之一更可取吗? 问题答案: 与这两种方法的主要区别在于目标是 始终 执行,而在目标只有在包含目标是执行。 一个澄清的例子: 在这里,将始终执行,而只有在定义时才会执行。 在此,仅当is即定义时才执行。
问题内容: 我正在尝试使用ant在命令行上生成apk。我可以使用ant clean,但是对于ant调试和ant release命令,我得到以下错误。 建立失败 C:\ Android \ sdk \ tools \ ant \ build.xml:649:执行此行时发生以下错误:C:\ Android \ sdk \ tools \ ant \ build.xml:694:执行失败:java.io
进程线程 怪异盒模型 动画 绝对定位 why React hook? useState原理 为什么不能if else里 微前端架构why 与spa区别 跨域
感觉蚂蚁面的好难啊,前端面试要手写 Promise,直接给我干抑郁了😭#蚂蚁求职进展汇总#
我不熟悉蚂蚁脚本。 以下是需求描述 在我的工作区中,有各种各样的项目,我必须在RAD和eclipse IDE以及Websphere、tomcat和jboss环境中进行项目工作。。我已经做了特定于项目的设置,以使项目在RAD、websphere、eclipse和tomcat n jboss上工作。。 但是在一些文件中有一些变化,比如classpath n和一些配置文件。 这就给我留下了三个版本的工作
- 项目略 - B+树有什么特点 - 对一个表设计索引需要注意的细节?多表查询索引优化 - 事务的隔离级别 - 可重复读什么? - 悲观锁和乐观锁 - 对JVM了解,JVM是什么结构,由那几部分组成 - docker如何实现多容器,原理, 如何实现隔离 - 线程池参数及其含义 - 拒绝策略类型 - 快排 原理 具体怎么做的 - Spring AOP 具体是什么意思 设计模式 - - 场景题:假设我