此示例使用来自 ANT的标准buildnumber任务。不幸的是,常春藤版本号任务无法正确解析解析器定义中具有额外属性的模块:-(
例子
$ tree
.
|-- build.xml
|-- ivysettings.xml
|-- ivy.xml
`-- src
`-- main
`-- HelloWorld.java
常春藤.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<info organisation="MyCompany" module="MyModule" e:shortrev="${publish.target.revision}" e:buildnum="${publish.buildnumber}"/>
<configurations defaultconfmapping="compile->default">
<conf name="compile" description="Required to compile application"/>
<conf name="runtime" description="Shared library needed at runtime" extends="compile"/>
<conf name="test" description="Required for test only" extends="runtime"/>
</configurations>
<publications>
<artifact name="MyModule" type="jar" e:shortrev="${publish.target.revision}" e:buildnum="${publish.buildnumber}"/>
</publications>
<dependencies>
<dependency org="commons-lang" name="commons-lang" rev="2.6"/>
<dependency org="junit" name="junit" rev="4.8.2" conf="test->default"/>
</dependencies>
</ivy-module>
笔记:
构建.xml
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="publish-example" default="build">
<!--
==========
Properties
==========
-->
<property name="src.dir" location="src/main"/>
<property name="build.dir" location="build"/>
<property name="classes.dir" location="${build.dir}/classes"/>
<property name="reports.dir" location="${build.dir}/reports"/>
<property name="publish.target.revision" value="1.2.3"/>
<property name="publish.status" value="release"/>
<property name="publish.resolver" value="custom.repository"/>
<!--
=======
Targets
=======
-->
<target name='init' description='Resolve project dependencies and set classpaths'>
<ivy:resolve/>
<ivy:report todir='${reports.dir}' graph='false' xml='false'/>
<ivy:cachepath pathid="compile.path" conf="compile"/>
<ivy:cachepath pathid="runtime.path" conf="runtime"/>
<ivy:cachepath pathid="test.path" conf="test"/>
<mkdir dir="${classes.dir}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false" classpathref="compile.path"/>
</target>
<target name="build" depends="compile">
<ivy:info/>
<jar destfile="${build.dir}/${ivy.module}.jar" basedir="${classes.dir}"/>
</target>
<target name="publish-revision" description="Determine the new published revision">
<buildnumber/>
<property name="publish.revision" value="${publish.target.revision}.${build.number}"/>
<property name="publish.buildnumber" value="${build.number}"/>
</target>
<target name="publish" depends="build,publish-revision" description="Publish artifacts into repository">
<ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${publish.revision}" status="${publish.status}"/>
<ivy:publish resolver="${publish.resolver}" pubrevision="${publish.revision}" overwrite="true">
<artifacts pattern="${build.dir}/[artifact].[ext]"/>
</ivy:publish>
</target>
<target name="clean" description="--> clean project files">
<delete dir="${build.dir}"/>
</target>
<target name="clean-all" depends="clean" description="--> clean ivy cache">
<ivy:cleancache />
</target>
</project>
笔记:
- ivy交付任务确保正确填充已发布的 ivy 文件。
常春藤设置.xml
<ivysettings>
<settings defaultResolver="central"/>
<resolvers>
<ibiblio name="central" m2compatible="true"/>
<filesystem name="custom.repository">
<ivy pattern="${ivy.settings.dir}/repository/[organisation]/[module]/[shortrev]/[buildnum]/ivy.xml" />
<artifact pattern="${ivy.settings.dir}/repository/[organisation]/[module]/[shortrev]/[buildnum]/[artifact].[ext]" />
</filesystem>
</resolvers>
</ivysettings>
笔记:
- 我总是将 Maven Central 设置为我的默认解析器,以便检索第三方依赖项,如 commons-lang 和 junit。
- custom.repository解析器在构建文件中配置为属性“publish.resolver ”