我已阅读所有教程和示例,但仍然无法在本地 Ivy 存储库中发布一组自定义 jar。
编辑:基本上我想要与 maven-install-plugin 相同的行为。
这是我的设置。我有一个 Ant 任务,它在给定文件夹中生成 jars。文件夹名称不是固定的,而是作为文件中的属性传递。我想获取此文件夹中的所有 jar 并将它们安装在我的本地 Ivy 存储库中,以便我可以在下一步中使用它们。
这是我的 Ant,我将其称为 ivy:publish:
<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>
当我调用 ant 任务时遇到的错误是:
无法发布 myOrg#myModule;1.0.0 的工件:java.lang.IllegalStateException:无法使用本地发布 myOrg#myModule;1.0.0!my-custom-jar.jar:未定义工件模式
我已经成功地运行了我的场景并使用它解决了我的问题tutorial https://stackoverflow.com/questions/1200762/good-ivy-tutorial-for-local-repository我的代码/集成中有两个主要问题。
第一个是你不能告诉 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>
愚蠢的想法是这应该是内置的。如果你按原样复制它,那么一切都会正常。如果配置不同,或者指向不同的位置 - 没有任何效果,并且不会告诉您原因。我阅读了大量有关 Apache Ivy 的文档,但没有提到这些模式应该指向本地 Ivy 存储库。我认为这些是罐子应该被取出的路径。我实际上对此有所抱怨,但是常春藤文档 http://ant.apache.org/ivy/history/2.2.0/resolver/filesystem.html很混乱。我也觉得例子 http://ant.apache.org/ivy/history/latest-milestone/settings/resolvers.html有错误的。谁想在他们的 ivy.settings.dir 中发布工件。就我而言,该目录位于我的存储库中!
还有第二个问题。它是一个较小的,同样很难看到和修复。修订参数有问题,文档再次混乱。如果您为修订版和发布修订版指定一个且相同的字符串,则工件不会发布,并且没有任何解释。我通过从 ivy.xml 文件中删除修订版来修复它。
最后但并非最不重要的一点是,我没有成功地运行“东西”作为 Ant 任务,但是使用 java -jar $IVY_JAR ...也许问题是因为版本,但我太累了,无法尝试使用它修复。
P.S.@cantSleep现在感谢您的帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)