所以,我们假设我已经安装了SVN并在本地安装了ANT / Ivy。
我想让常春藤配置的“共享”部分指向服务器上的某种共享。我怎么需要设置它?
我知道我必须深入了解常春藤罐并取出ivysettings文件并修改共享存储库。
因此,假设我的内部网上有一台服务器位于MyServer.intranet.net,而我的团队的文件夹位于/ path / to / NetAdmin下(因此完整路径为MyServer.intranet.net/path/to/NetAdmin )我如何将此设置为共享库的团队存储库?我只是指定它,当我打包项目时,它会在那里编写依赖项吗?
由于
答案 0 :(得分:2)
我在这里做了什么:
ivy.dir
。ivy.dir
项目中,我有最新的ivy.jar。ivy.dir
中,我为我们的环境设置了ivysettings.xml
。例如,我们为自己的jar使用本地Artifactory Maven存储库。 ivysettings.xml
项目中的ivy.dir
指向该内容。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.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项目。build.xml
定义中向<project>
添加常春藤命名空间定义。ivy.dir
设置为“$ {basedir} /ivy.dir。<import>
任务将${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构建执行程序定义不同的常春藤缓存来解决问题。一个Jenkins服务器,你有常春藤缓存,称为$HOME/.ivy2/cache-0
,$HOME/.ivy2/cache-1
等。每个执行者都可以删除它自己的常春藤缓存,而不会影响其他人。用户同时只有$HOME/.ivy2/cache-0
。ivy.dir
和ivy.tasks.xml
文件来安装其他任务。例如,我们的每个项目都必须通过Findbugs,PMD,CPD(PMD项目的一部分,Checkstyle,并使用JaCoCo进行测试覆盖。< / LI>
这些项目中的每一个都包含一个jar文件和一个<taskdef>
,用于将任务定义拉入Ant。而且,你如何使用这些任务呢?它们未在标准Ant模型中定义。开发人员不知道如何使用它们。
我已将这些jar添加到我的ivy.dir
项目中,并将所有这些任务定义安装到我的ivy.tasks.xml
文件中。我还为大多数这些任务定义了易于使用的<macrodef>
,因此开发人员很容易使用它们。事实上,我甚至为了好玩而将旧的Ant-Contrib任务包括在内。
现在,一旦将ivy.dir
添加到项目中,就可以完成所有这些额外任务,而且您的计算机上无需安装任何内容。
答案 1 :(得分:1)
您无需更换常春藤罐。只需在ivysettings文件中创建一个文件系统解析器并发布到此文件系统。这是一个例子:
你会发现常春藤非常灵活,可以支持几乎任何托管文件的机制。
就个人而言,我考虑安装一个Maven存储库管理器,如Nexus或Artifactory,并使用它来托管构建依赖项和构建输出。从长远来看,它更容易,特别是如果你正在进行Java开发。