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

2023-12-30


我已阅读所有教程和示例,但仍然无法在本地 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(使用前将#替换为@)

如何将自定义 jar 发布到本地 Apache Ivy 存储库 的相关文章

随机推荐