如何将自定义jar发布到本地ApacheIvy存储库




我已经阅读了所有的教程和示例,但仍然无法在本地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>

相关内容

  • 没有找到相关文章

最新更新