ivy:retrieve select 使用哪个 ivy.xml 文件
ivy:retrieve select which ivy.xml file to use
有没有办法 select 当我调用 ivy:retrieve
时要使用哪个 ivy.xml
文件?
看起来 at the documentation 看来我可以使用 settingsRef
属性 到 select 要使用的 IVY 设置文件,但它不是 ivysettings.xml
文件我想修改,而是ivy.xml
。我的用例如下:
- 我有一个主
ivy.xml
文件,用于获取我的编译时和 运行-time 依赖项
- 我还有一些构建工具链依赖项,即某些 Ant 任务本身使用的 jar(例如 findbugs、cobertura、pmd、代码风格合规性检查等)。这些东西既不是编译时间也不是我代码的 运行 时间依赖项。此外,它在我使用此工具链构建的所有项目中都是相同的,因此我希望能够在一个单独的
ivy.xml
文件中识别这些依赖项,我可以简单地在我的项目中复制该文件。
可以,但您必须在 ivy:resolve, parameter is called file
. The reason for his is that retrieve is a post resolve task 中指定文件。
简短的回答是使用 ivy 配置:
http://ant.apache.org/ivy/history/latest-milestone/tutorial/conf.html
Ivy 配置可用于针对不同目的对依赖项进行分组。你不需要多个常春藤文件。
例子
这是我的决心目标:
<target name="resolve" description="Download dependencies and setup classpaths">
<ivy:resolve/>
<ivy:report todir='${reports.dir}/ivy' graph='false' xml='false'/>
<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="test.path" conf="test"/>
<ivy:cachepath pathid="build.path" conf="build"/>
</target>
然后可以在我需要类路径的各种任务中直接使用它
<!-- Compiling code -->
<javac srcdir="${src.dir}"... classpathref="compile.path"/>
<!-- Testing code -->
<junit haltonfailure="yes" fork="true">
<classpath>
<path refid="test.path"/>
<pathelement path="${classes.dir}"/>
<pathelement path="${test.classes.dir}"/>
</classpath>
..
</junit>
<!-- 3rd party ANT tasks -->
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" classpathref="build.path"/>
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml" classpathref="build.path"/>
..
我个人只使用检索任务来构建档案。在这里我再次使用配置来控制我想要的罐子:
<ivy:retrieve pattern="${build.dir}/libs/[artifact].[ext]" conf="runtime"/>
<war destfile="${war.file}" webxml="${resources.dir}/web.xml">
<fileset dir="${resources.dir}" excludes="web.xml"/>
<classes dir="${build.dir}/classes"/>
<lib dir="${build.dir}/libs"/>
</war>
IVY文件
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="demo"/>
<configurations>
<conf name="compile" description="Required to compile application"/>
<conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
<conf name="test" description="Required for test only" extends="runtime"/>
<conf name="build" description="ANT task dependencies"/>
</configurations>
<dependencies>
<!-- compile dependencies -->
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.5" conf="compile->default"/>
<!-- runtime dependencies -->
<dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.5" conf="runtime->default"/>
<!-- test dependencies -->
<dependency org="junit" name="junit" rev="4.11" conf="test->default"/>
<!-- Build dependencies -->
<dependency org="org.codehaus.sonar-plugins" name="sonar-ant-task" rev="2.1" conf="build->default"/>
<dependency org="org.jacoco" name="org.jacoco.ant" rev="0.6.3.201306030806" conf="build->default"/>
</dependencies>
</ivy-module>
所需的配置已在顶部声明。注意一些是如何设置操作的。例如 "compile" 依赖项自动成为 "runtime" 和 "test".
的一部分
其次,配置映射很关键:
- myconf->default : 包含传递依赖项
- myconf->master : 只是没有依赖的模块 jar
所以我最后是这样的:
<target name="fetch-buildsystem-deps" depends="configure-ivy-settings">
<ivy:resolve file="ivy-buildsystem.xml"/>
<ivy:retrieve conf="build-system"
pattern="${lib-ivy-buildsystem.dir}/[artifact]-[revision](-[classifier]).[ext]"
sync="true"
type="jar, bundle"/>
</target>
… 其中文件 ivy-buildsystem.xml
仅标识我的 Ivy 任务的依赖项。例如。包含如下内容:
<configurations>
<conf name="build-system" description="artifacts needed by the build-system itself"/>
</configurations>
<dependencies>
<!--dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" conf="build-system->master"/-->
<dependency org="com.puppycrawl.tools" name="checkstyle" rev="5.9" conf="build-system->default"/>
<dependency org="com.google.code.findbugs" name="findbugs-ant" rev="3.0.0" conf="build-system->default"/>
<dependency org="net.sourceforge.pmd" name="pmd-java" rev="5.5.3" conf="build-system->default"/>
</dependencies>
有没有办法 select 当我调用 ivy:retrieve
时要使用哪个 ivy.xml
文件?
看起来 at the documentation 看来我可以使用 settingsRef
属性 到 select 要使用的 IVY 设置文件,但它不是 ivysettings.xml
文件我想修改,而是ivy.xml
。我的用例如下:
- 我有一个主
ivy.xml
文件,用于获取我的编译时和 运行-time 依赖项 - 我还有一些构建工具链依赖项,即某些 Ant 任务本身使用的 jar(例如 findbugs、cobertura、pmd、代码风格合规性检查等)。这些东西既不是编译时间也不是我代码的 运行 时间依赖项。此外,它在我使用此工具链构建的所有项目中都是相同的,因此我希望能够在一个单独的
ivy.xml
文件中识别这些依赖项,我可以简单地在我的项目中复制该文件。
可以,但您必须在 ivy:resolve, parameter is called file
. The reason for his is that retrieve is a post resolve task 中指定文件。
简短的回答是使用 ivy 配置:
http://ant.apache.org/ivy/history/latest-milestone/tutorial/conf.html
Ivy 配置可用于针对不同目的对依赖项进行分组。你不需要多个常春藤文件。
例子
这是我的决心目标:
<target name="resolve" description="Download dependencies and setup classpaths">
<ivy:resolve/>
<ivy:report todir='${reports.dir}/ivy' graph='false' xml='false'/>
<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="test.path" conf="test"/>
<ivy:cachepath pathid="build.path" conf="build"/>
</target>
然后可以在我需要类路径的各种任务中直接使用它
<!-- Compiling code -->
<javac srcdir="${src.dir}"... classpathref="compile.path"/>
<!-- Testing code -->
<junit haltonfailure="yes" fork="true">
<classpath>
<path refid="test.path"/>
<pathelement path="${classes.dir}"/>
<pathelement path="${test.classes.dir}"/>
</classpath>
..
</junit>
<!-- 3rd party ANT tasks -->
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" classpathref="build.path"/>
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml" classpathref="build.path"/>
..
我个人只使用检索任务来构建档案。在这里我再次使用配置来控制我想要的罐子:
<ivy:retrieve pattern="${build.dir}/libs/[artifact].[ext]" conf="runtime"/>
<war destfile="${war.file}" webxml="${resources.dir}/web.xml">
<fileset dir="${resources.dir}" excludes="web.xml"/>
<classes dir="${build.dir}/classes"/>
<lib dir="${build.dir}/libs"/>
</war>
IVY文件
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="demo"/>
<configurations>
<conf name="compile" description="Required to compile application"/>
<conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
<conf name="test" description="Required for test only" extends="runtime"/>
<conf name="build" description="ANT task dependencies"/>
</configurations>
<dependencies>
<!-- compile dependencies -->
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.5" conf="compile->default"/>
<!-- runtime dependencies -->
<dependency org="org.slf4j" name="slf4j-log4j12" rev="1.7.5" conf="runtime->default"/>
<!-- test dependencies -->
<dependency org="junit" name="junit" rev="4.11" conf="test->default"/>
<!-- Build dependencies -->
<dependency org="org.codehaus.sonar-plugins" name="sonar-ant-task" rev="2.1" conf="build->default"/>
<dependency org="org.jacoco" name="org.jacoco.ant" rev="0.6.3.201306030806" conf="build->default"/>
</dependencies>
</ivy-module>
所需的配置已在顶部声明。注意一些是如何设置操作的。例如 "compile" 依赖项自动成为 "runtime" 和 "test".
的一部分其次,配置映射很关键:
- myconf->default : 包含传递依赖项
- myconf->master : 只是没有依赖的模块 jar
所以我最后是这样的:
<target name="fetch-buildsystem-deps" depends="configure-ivy-settings">
<ivy:resolve file="ivy-buildsystem.xml"/>
<ivy:retrieve conf="build-system"
pattern="${lib-ivy-buildsystem.dir}/[artifact]-[revision](-[classifier]).[ext]"
sync="true"
type="jar, bundle"/>
</target>
… 其中文件 ivy-buildsystem.xml
仅标识我的 Ivy 任务的依赖项。例如。包含如下内容:
<configurations>
<conf name="build-system" description="artifacts needed by the build-system itself"/>
</configurations>
<dependencies>
<!--dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" conf="build-system->master"/-->
<dependency org="com.puppycrawl.tools" name="checkstyle" rev="5.9" conf="build-system->default"/>
<dependency org="com.google.code.findbugs" name="findbugs-ant" rev="3.0.0" conf="build-system->default"/>
<dependency org="net.sourceforge.pmd" name="pmd-java" rev="5.5.3" conf="build-system->default"/>
</dependencies>