- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前有ANT_HOME
位于 /home/<myuser>/ant/1.8.4/ant-1.8.4
.
我刚下载 the Apache Ivy tarball that includes its dependencies .我解压到/home/<myuser>/ivy/2.3.0-rc1/ivy-2.3.0-rc1
.
然后我复制了/home/<myuser>/ivy/2.3.0-rc1/ivy-2.3.0-rc1/lib/*.jar
至 ANT_HOME/lib
.如果我对 Ant 如何与插件/扩展一起工作的理解是正确的,那么 Ant 现在应该能够在运行时访问 Ivy 的所有任务。
我的下一个问题是,如何在我的 Ant 构建文件中定义 Ivy 任务?假设我想使用 ivy-retrieve
, ivy-resolve
和 ivy-publish
任务。当我从命令行运行我的 Ant 构建时(我不会通过 Ant-Eclipse 插件构建),我需要做哪些配置(在 XML 中)才能使这些任务正常工作。提前致谢!
最佳答案
首先,你必须定义一个<taskdef>
指向 Ivy 任务。
<property environment="env"/>
<property name="ivy.home" value="${env_IVY_HOME}"/>
<taskdef resource="org/apache/ivy/ant/antlib.xml">
<classpath>
<fileset dir="${ivy.home}">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
这将使您能够访问 Ivy 任务。您将像这样使用这些任务:
<cachepath pathid="main.classpath" conf="compile"/>
问题是您的 Ivy 任务名称可能会与其他 Ant 任务冲突。例如,有一个 Ivy 任务 <report>
.要解决这个问题,您可以创建一个 Ivy 命名空间。为此,您在 <project>
中的命名空间中放置一个引用像这样的实体:
<project name="my.proj" default="package" basedir="."
xmlns:ivy="antlib:org.apache.ivy.ant"/>
现在,当您定义 Ivy 任务时,您可以使用 antlib:org.apache.ivy.ant
引用你的ivy
命名空间。与以前相同的 taskdef,但带有 uri
领域:
<property environment="env"/>
<property name="ivy.home" value="${env_IVY_HOME}"/>
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="antlib:org.apache.ivy.ant">
<classpath>
<fileset dir="${ivy.home}">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
顺便说一句,这没有什么特别的uri
.我本可以这样做:
<project name="my.proj" default="package" basename="."
xmlns:ivy="pastrami:with.mustard">
[...]
<taskdef resource="org/apache/ivy/ant/antlib.xml"
uri="pastrami:with.mustard">
<classpath>
<fileset dir="${ivy.home}">
<include name="*.jar"/>
</fileset>
</classpath>
</taskdef>
重点是现在您可以在任务名称前加上 ivy:
前缀.而不是这个:
<cachepath pathid="main.classpath" conf="compile"/>
您现在可以这样做:
<ivy:cachepath pathid="main.classpath" conf="compile"/>
这就是您访问 Ivy Ant 任务的方式。
现在,您可以访问您的 Ivy Ant 任务,您需要定义一个 ivysettings.xml
文件并使用 <ivy:settings/>
指向那里的任务:
<ivy:settings file="${ivy.home}/ivysettings.xml"/>
有一个默认的ivysettings.xml
嵌入在 Ivy 中的文件将指向世界范围的 Maven 存储库系统。如果您没有公司范围的 Maven 存储库,那么您可以使用默认的 ivysettings.xml
文件:
<ivy:settings/>
这很简单。
完成后,您需要读入 resolve你的ivy.xml
文件通常位于项目的根目录中,与 build.xml
位于同一目录中文件。
基本上,您的 ivy.xml
文件包含对要引入项目的第三方 jar 的引用。例如:
<dependencies>
<dependency org="log4j" name="log4j" rev="1.2.17" conf="compile->default"/>
<dependency org="junit" name="junit" rev="4.10" conf="test->default"/>
</dependencies>
这就是说我需要 log4j.jar
(修订版 1.2.17)用于编译(以及编译测试),我需要 junit.jar
(revision.4.10) 用于编译我的测试代码。
compile->default
是我的 compile
的映射配置到 Maven 的 default
配置(它说我只想要 Jar 和它可能依赖的任何其他 jar。
我的 compile
在哪里?配置从何而来?我在我的 ivy.xml
中定义了它.有十种标准配置。这也会进入您的 ivy.xml
文件:
<configurations>
<conf name="default" visibility="public" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/>
<conf name="master" visibility="public" description="contains only the artifact published by this module itself, with no transitive dependencies"/>
<conf name="compile" visibility="public" description="this is the default scope, used if none is specified. Compile dependencies are available in all classpaths."/>
<conf name="provided" visibility="public" description="this is much like compile, but indicates you expect the JDK or a container to provide it. It is only available on the compilation classpath, and is not transitive."/>
<conf name="runtime" visibility="public" description="this scope indicates that the dependency is not required for compilation, but is for execution. It is in the runtime and test classpaths, but not the compile classpath." extends="compile"/>
<conf name="test" visibility="private" description="this scope indicates that the dependency is not required for normal use of the application, and is only available for the test compilation and execution phases." extends="runtime"/>
<conf name="system" visibility="public" description="this scope is similar to provided except that you have to provide the JAR which contains it explicitly. The artifact is always available and is not looked up in a repository."/>
<conf name="sources" visibility="public" description="this configuration contains the source artifact of this module, if any."/>
<conf name="javadoc" visibility="public" description="this configuration contains the javadoc artifact of this module, if any."/>
<conf name="optional" visibility="public" description="contains all optional dependencies"/>
</configurations>
您可以使用任何您想要的配置名称,但这些映射到默认的 Maven 配置并被广泛使用。
一旦你有了你的 ivy.xml
文件定义,你可以使用<ivy.resolve>
解决您的依赖关系:
<ivy:resolve/>
因此,我们有以下内容:
<taskdef>
在你的build.xml
将 Ivy Ant 任务合并到您的构建中。<ivy:settings>
配置 Ivy 。<ivy:resolve/>
阅读你的ivy.xml
归档并解决您的第三方 jar 依赖项。现在,您可能想要实际使用这些 jar 文件。可以通过三种方式做到这一点:
<ivy:cachepath pathid="main.classpath" conf="compile"/>
<ivy:cachepath/>
任务将创建一个类路径(在本例中称为 main.classpath),它指向您在 ivy.xml
中的 jar。文件的 compile
配置。大多数时候都使用这种方法。
如果你需要一个文件集,你可以使用这个:
<ivy:cachefileset setid="compile.fileset" conf="compile"/>
在这种情况下,它将创建一个 refid 为 compile.fileset
的文件集.
有时您必须将 jars 带入您的项目中。例如,如果您创建一个 war 或 ear 文件,您想要封装您的 jars。在这种情况下,您可以使用这个:
<property name="lib.dir" value="${target.dir}/lib"/>
<ivy:retrieve pattern="${lib.dir}/[artifact].[ext]"
conf="runtime"/>
这会将您的 jar 提取到 ${lib.dir}
中目录,因此您可以将它们包含在 war 或耳朵中。
很抱歉回答很长,但是有很多步骤要涵盖。我强烈推荐曼宁的书 Ant in Action其中有一整章是关于 Ivy 的。
关于java - 如何为 Ant 构建配置 Ivy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378892/
我在使用 gradle 构建一个特定应用程序时遇到问题。该应用程序可以用 eclipse 编译和构建,它在平板电脑上运行良好。当我尝试使用 Gradle 构建它时,“compileDebugJava”
我有一个 C 程序,是一位离开的开发人员留给我的。我试图弄清楚他到底在做什么,并将软件重新安排成更合乎逻辑的东西,这样我就可以更轻松地构建它。我正在使用 CMake 构建,而他使用的是 Make。 有
我刚开始阅读“Pro Spring MVC with web flow”,它附带了一个我想遵循的代码示例。 我要什么 - 我想像书中那样构建应用程序,使用 Gradle 有什么问题 - 我没用过 Gr
我希望有人已经这样做了。我正在尝试为我的一个 angular 2 项目在 teamcity 中建立一个连续的构建。在做了一些研究之后,我按照以下步骤操作: 构建步骤 1:为 teamcity 安装 j
我有一个旧的 ASP.Net 网站解决方案,看起来像: 当我在 Visual Studio 中构建解决方案时,我得到以下输出: ------ Build started: Project: C:\..
我使用 gulp-usref、gulp-if、gulp-uglify、gulp-csso 和 gulp-file-include 来构建我的应用程序。除了 HTML 保持原样外,构建中的一切都运行良好
我正在使用 ionic2 开发内部移动应用程序。我可以通过以下方式成功构建 ios: ionic build ios and ionic build ios --prod 但当我这样做时,它一直失败
我是一位经验丰富的 .NET/C# 开发人员,但对这里的几乎所有技术/库(包括 SQL/DB 工作)都是新手。 我正在开发一个具有 Azure/Entity Framework .NET 后端和可移植
我正在使用 VS 2008。我可以使用 IDE 成功编译我的解决方案。但是,当我尝试使用 devenv.com 构建它时,它失败并提示“错误:找不到项目输出组'(无法确定名称)的输出”。该组、其配置或
版本: ember.js 2.7,ember-data 2.7 ember-cli 2.9.1//同样适用于 ember-cli 2.7 node 6.9.1, npm 3.10.9//也适用于 no
我第一次修补 AzureDevops,设置一些 CI 任务。 我有一个公共(public)存储库(开源)和一个包含 3 个 F# 项目的解决方案(.sln)。该解决方案在 Windows/Mac/Li
目前 5.1.5 版本或 STLPort CVS 存储库似乎仍不支持 VS2008。如果有人已经完成了这项工作,那么如果可能的话,分享会很有用:) 同样,了解 VS2005 或 2008 x64 构建
我有一个 Python 2.7 项目,到目前为止一直使用 gfortran 和 MinGW 来构建扩展。我使用 MinGW,因为它似乎支持 Fortran 代码中的写入语句和可分配数组,而 MSVC
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我想知道为什么在 Zimbra Wiki 中只列出了构建过程的特定平台。这意味着不可能在其他 Linux 发行版上构建 Zimbra? Zimbra 社区选择一个特殊的 Linux 发行版来构建 Zi
我将在 Swift 中构建一个 CLI 工具。我用这个命令创建了项目 swift package init --type executable当我构建我的项目并解析 时读取别名 Xcode 中的参数并
我想为添加到 docker 镜像的文件设置文件权限。我有这个简单的 Dockerfile: FROM ubuntu:utopic WORKDIR /app RUN groupadd -g 1000 b
当我使用 clBuildProgram在我的 OpenCl 代码中,它失败并显示错误代码 -11,没有任何日志信息。 这是我的代码的样子: ret = clBuildProgram(program
我有一个底部导航栏,它有一个列表页面,该页面使用状态块。 class _MainPageState extends State { int _index = 0; @override Wi
我在本地计算机上使用Jenkins(Jenkins URL未通过Internet公开,但该计算机上已启用Internet。) 我进行了以下配置更改: 在Jenkins工具上安装了Git和Github插
我是一名优秀的程序员,十分优秀!