我已经阅读了所有的教程和示例,但仍然无法在本地Ivy存储库中发布一组自定义jar。
编辑:基本上我想要与maven安装插件相同的行为
这是我的设置。我有一个Ant任务,它在给定的文件夹中生成jar。文件夹名称不是固定的,而是作为文件中的属性传递的。我想把所有的罐子都放在这个文件夹里,安装在我当地的Ivy仓库里,这样我就可以在下一步使用它们了。
这是我的蚂蚁,我称之为常春藤:发布:
<project name="Install Ivy Dependencies" xmlns:ivy="antlib:org.apache.ivy.ant" basedir="." default="publish">
<loadproperties srcFile="path_to_folder.properties"/>
<property name="file_pattern" value="${path_to_folder}/[artifact].[ext]" />
<property name="pub_revision" value="1.0.0" />
<target name="resolve">
<ivy:configure file="ivysettings.xml" />
<ivy:resolve file="ivy.xml" />
</target>
<target name="retrieve-all" depends="resolve">
<ivy:retrieve pattern="${file_pattern}" conf="*" />
</target>
<target name="publish" depends="retrieve-all">
<ivy:publish resolver="local" organisation="myOrg" update="true" overwrite="true" pubrevision="${pub_revision}">
<artifacts pattern="${file_pattern}"/>
</ivy:publish>
</target>
</project>
这是我的ivysettings.xml:
<ivysettings>
<resolvers>
<filesystem name="local" local="true"/>
</resolvers>
</ivysettings>
和ivy.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="myOrg" module="myModule" revision="1.0.0"/>
<publications>
<artifact name="my-custom-jar" ext="jar" type="jar"/>
<artifact name="my-custom-jar-source" ext="jar" type="source"/>
</publications>
</ivy-module>
调用蚂蚁任务时出现的错误为:
无法发布myOrg#myModule的工件;1.0.0:java.lang.IllegalStateException:无法发布myOrg#myModule;1.0.0!my-custom-jar.jar使用local:未定义工件模式
我已经成功地运行了我的场景,并使用本教程解决了我的问题在我的代码/集成中有两个主要问题
首先,如果不提供路径,就不能告诉Ivy在其存储库中发布工件
<filesystem name="local" local="true" transactional="local">
<ivy pattern="${ivy.default.ivy.user.dir}/local/[module]/ivy-[revision].xml" />
<artifact pattern="${ivy.default.ivy.user.dir}/local/[module]/[artifact]-[revision].[ext]" />
</filesystem>
愚蠢的想法是,这应该是内置的。如果你照原样复制,那么一切都会正常工作。如果配置不同,或者指向不同的位置,那么什么都不起作用,也不会告诉你为什么。我读了很多关于ApacheIvy的文档,但没有提到这些模式应该指向本地Ivy存储库。我以为这些是罐子应该被拿走的地方。实际上我对此颇有怨言,但Ivy的文档非常混乱。此外,我认为那里的例子是错误的。谁想在他们的ivy.settings.dir中发布工件。在我的情况下,这个目录在我的存储库中
还有第二个问题。它是一个较小的,而且很难看到和修复。修订参数有问题,文档又乱了。如果您为修订和发布修订指定了一个相同的字符串,则不会在没有任何解释的情况下发布工件。我通过从ivy.xml文件中删除修订版来修复它。
最后,但并非最不重要的是,我没有成功地运行作为Ant任务的"事情",但使用了java-jar$IVY_jar。。。也许问题是因为版本的原因,但我太累了,无法尝试修复。P.S.@cantSleep现在谢谢你的帮助。
您需要在ivysettings.xml中向解析器添加工件模式,类似于(来自ivy文档的示例(:
<ivysettings>
<resolvers>
<filesystem name="local" local="true">
<ivy pattern="${ivy.settings.dir}/1/[organisation]/[module]/ivys/ivy-[revision].xml"/>
<artifact pattern="${ivy.settings.dir}/1/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/>
</filesystem>
</resolvers>
</ivysettings>