因此,让我们假设我已经安装了一个SVN,并在本地安装了ANT / Ivy。
我想让ivy配置中的“共享”部分指向服务器上的某种共享。我需要如何设置它?
我知道我必须在ivy jar中挖掘,取出ivysettings文件并修改共享存储库。
因此,假设我在intranet上的MyServer.intranet.net上有一台服务器,我团队的文件夹在/ path /to/NetAdmin下(因此完整路径是MyServer.intranet.net/path/to/NetAdmin ),我该如何将其设置为共享库的团队存储库?我是否只需要指定它,当我打包项目时,它会在那里写入依赖项?
谢谢
发布于 2012-09-13 09:54:05
下面是我所做的:
我创建了一个Subversion项目,名为ivy.dir.
ivy.dir项目,我有最新的ivy.jar。ivy.dir中,我为我们的环境安装了ivysettings.xml。例如,我们将本地Artifactory Maven存储库用于我们自己的jars。ivy.dir项目中的ivysettings.xml指向该文件。ivy.tasks.xml的文件。这是一个Ant构建文件。ivy.tasks.xml如下所示:
<project name="Ivy.Tasks"
xmlns:ivy="http://ant.apache.org/ivy"
xmlns:jacoco="antlib:org.jacoco.ant">
<property environment="env"/>
<!-- Add Ivy Tasks -->
<taskdef uri="http://ant.apache.org/ivy"
resource="org/apache/ivy/ant/antlib.xml">
<classpath>
<fileset dir="${ivy.dir}">
<include name="ivy*.jar"/>
</fileset>
</classpath>
</taskdef>
<ivy:settings file="${ivy.dir}/ivysettings.xml"/>
</project>请注意,我有自己的Ivy设置,谢谢。我不需要在ivy.jar中使用这个文件(尽管我可以这样做,因为每个人都会使用我的ivy.jar文件!)。我的ivysettings.xml看起来像这样:
<ivysettings>
<!-- I'll explain this part below -->
<property name="env.EXECUTOR_NUMBER" value="0" override="false"/>
<caches
defaultCacheDir="${ivy.default.ivy.user.dir}/cache-${env.EXECUTOR_NUMBER}"
resolutionCacheDir="${ivy.dir}/../target/ivy.cache"/>
<!-- Just the standard stuff you find in the `ivysettings.xml in the ivy.jar -->
<settings defaultResolver="default"/>
<include file="${ivy.dir}/ivysettings-public.xml"/> <!-- This one is different -->
<include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
<include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
</ivysettings>最大的变化是ivysetting-public.xml文件:
<ivysettings>
<resolvers>
<ibiblio name="public"
m2compatible="true"
checkmodified="true"
root="http://repos.vegicorp.com/artifactory/libs-release" />
</resolvers>
</ivysettings>它指向我本地的Maven存储库--我的Artifactory服务器。
现在,对于使用Ivy的开发人员来说,他们所要做的就是:
svn:external。此svn:external将用于将我的ivy.dir项目引入到他们的Subversion项目中。<project> ivy.dir中,以便将${ivy.dir}/ivy.tasks.xml导入到他们的build.xml任务中
如下所示:
<project name="post-a-matic" default="package" basedir="."
xmlns:ivy="http://ant.apache.org/ivy">
<property name="ivy.dir" value="${basedir}/ivy.dir"/>
<import file="${ivy.dir}/ivy.tasks.xml"/>
<!-- A whole bundle of properties are set -->
<target name="clean">
<delete dir="${target.dir}"/>
<ivy:cleancache/> <!-- Look: They have access to Ivy! -->
</target>
<target name="-resolve">
<ivy:resolve/>
</target>
<target name="compile"
depends="-resolve">
<ivy:cachpath
pathid="main.classpath"
conf="compile,provided"/>
<!-- Boy that's easy! -->
<javac srcdir="${main.srcdir}"
destdir="${main.destdir}"
classpathref="main.classpath"/>
</target>
<!-- On and on -->这解决了很多问题:
ivy.settings,每个人都将拥有更新后的设置。这对我们来说非常重要,因为我们使用Jenkins,我希望Jenkins在每次构建时清理常春藤缓存。哇哦!这将清除同时执行的构建上的常春藤缓存!我通过更改ivysettings.xml文件来为每个Jenkins构建执行器定义不同的Ivy缓存,从而解决了这个问题。在Jenkins服务器上,您有名为$HOME/.ivy2/cache-0、$HOME/.ivy2/cache-1等的常春藤缓存。每个executor可以删除自己的常春藤缓存,而不会影响其他常春藤缓存。同时,用户只需使用$HOME/.ivy2/cache-0.ivy.dir和ivy.tasks.xml文件来安装其他任务。例如,我们的每个项目都必须通过Findbugs、PMD、CPD ( PMD项目的一部分)、Checkstyle和使用JaCoCo来运行。用于测试覆盖率。这些项目中的每一个都由一个jar文件和一个用于将任务定义拉入Ant的<taskdef>组成。还有,你也是如何使用这些任务的?它们不是在标准Ant模型中定义的。开发人员不知道如何使用它们。
我已经将这些jars添加到我的ivy.dir项目中,并将所有这些任务定义安装到我的ivy.tasks.xml文件中。我还为大多数任务定义了易于使用的<macrodef>,因此开发人员可以很容易地使用它们。事实上,我甚至为了好玩而包含了旧的Ant-Contrib任务。
现在,一旦您将ivy.dir添加到您的项目中,您就有了所有这些额外的任务,并且您没有什么需要安装到您的机器上。
发布于 2012-09-13 05:19:34
你不需要换常春藤罐子。只需在ivysettings文件中创建一个文件系统解析器并发布到此。下面是一个例子:
您会发现ivy非常灵活,几乎可以支持任何托管文件的机制。
就我个人而言,我会考虑安装像Nexus或Artifactory这样的Maven库管理器,并使用它来托管您的构建依赖项和构建输出。从长远来看,这要容易得多,特别是如果您正在进行Java开发。
https://stackoverflow.com/questions/12374161
复制相似问题