我已经阅读了所有教程和示例,但仍然无法在我的本地Ivy存储库中发布一组自定义jar。
编辑:基本上我想要与maven-install-plugin相同的行为。
这是我的设置。我有一个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>
我在调用ant任务时遇到的错误是:
无法为myOrg发布工件#myModule; 1.0.0:java.lang.IllegalStateException:无法使用local发布myOrg#myModule; 1.0.0!my-custom-jar.jar:未定义工件模式
答案 0 :(得分:1)
我设法运行我的方案并使用此tutorial来解决我的问题。我的代码/集成中存在两个主要问题。
首先,你不能告诉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存储库。我认为这些是从罐子里取出的路径。我实际上抱怨过这个,但Ivy documentation非常令人困惑。我还认为the examples有错误。谁想在他们的ivy.settings.dir中发布工件。在我的情况下,这个目录在我的存储库中!
还有第二个问题。它是一个较小的,再次很难看到和修复。修订参数出现了问题,文档再次搞砸了。如果为修订版和pub修订版指定了一个相同的字符串,则工件不会在没有任何解释原因的情况下发布。我通过从ivy.xml文件中删除修订版来修复它。
最后,但并非最不重要的是,我没有成功地成功运行&#34;&#34;作为Ant任务,但使用java -jar $ IVY_JAR ......也许问题是因为版本,但我太累了,不能尝试修复。 P.S. @ cantSleepNow感谢您的帮助。
答案 1 :(得分:0)
你需要在ivysettings.xml中为解析器添加工件模式,类似于(example from ivy documentation):
<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>