gpt4 book ai didi

java - 以编程方式使用 IVY 依赖管理器

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:00 24 4
gpt4 key购买 nike

我需要帮助使用 IVY 作为依赖项管理器
我的应用程序需要在运行时加载插件
意味着当核心应用程序运行时,用户可以请求一个新的插件
并安装它们,
我希望使用核心应用程序数据库管理所有已安装的插件。

我想从我的插件服务器(或其他一些描述符)获取一个 pom,
并让 IVY 告诉我依赖项是什么,或者让 IVY安装插件和依赖项,基于我的应用程序的当前状态。

(我现在有什么,
1.jar's被核心应用使用
2.jar是当前安装的插件使用的)

我希望每个插件都有独立的目录
在我的应用程序所在的某个文件夹下(不是共享文件夹)

问题是我不知道从哪里开始
我注意到没有针对它的编程 API

我在尝试类似操作的人的网络上找到了一个链接
但看起来代码没有完成,或者缺少一些变量而且我不知道如何完成剩余的编程文档湖
http://www.mail-archive.com/ivy-user@ant.apache.org/msg03228.html(变量“art”的来源......)

你能帮帮我吗...谢谢大家

更新

好的,这就是我现在正在尝试的。我遇到了一些错误,而且我不知道如何定义我的存档服务器

      IvySettings settings = new IvySettings();

settings.setDefaultIvyUserDir(new File("D:/programming/eclipse_projects/ivyTest/repo/"));

settings.setDefaultCache(new File("D:/programming/eclipse_projects/ivyTest/repo/cache/"));
settings.setDefaultCacheArtifactPattern("[module]/[revision]/[module]-[revision](-[classifier]");

Ivy ivy = Ivy.newInstance(settings);

ivy.getLoggerEngine().pushLogger(new DefaultMessageLogger(Message.MSG_VERBOSE));

ModuleDescriptor md = PomModuleDescriptorParser.getInstance().parseDescriptor(new IvySettings(), new File("src/movies.pom").toURL(), true);

RetrieveOptions retriveOptions = new RetrieveOptions();
retriveOptions.setUseOrigin(true);
retriveOptions.setConfs(md.getConfigurationsNames());
ivy.retrieve(md.getModuleRevisionId(), "lib/[conf]/[artifact].[ext]", etriveOptions);

这是我得到的错误

:: loading settings :: url = jar:file:/D:/programming/eclipse_projects/ivyTest/ivy-2.2.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
:: retrieving :: org.jtpc#movies
checkUpToDate=true
confs: [default, master, compile, provided, runtime, test, system, sources, javadoc, optional]
java.lang.RuntimeException: problem during retrieve of org.jtpc#movies: java.lang.IllegalStateException: Report file 'D:\programming\eclipse_projects\ivyTest\repo\cache\org.jtpc-movies-default.xml' does not exist.
at org.apache.ivy.core.retrieve.RetrieveEngine.retrieve(RetrieveEngine.java:206)
at org.apache.ivy.Ivy.retrieve(Ivy.java:540)
at Test.main(Test.java:52)
Caused by: java.lang.IllegalStateException: Report file 'D:\programming\eclipse_projects\ivyTest\repo\cache\org.jtpc-movies-default.xml' does not exist.
at org.apache.ivy.plugins.report.XmlReportParser.parse(XmlReportParser.java:294)
at org.apache.ivy.core.retrieve.RetrieveEngine.determineArtifactsToCopy(RetrieveEngine.java:288)
at org.apache.ivy.core.retrieve.RetrieveEngine.retrieve(RetrieveEngine.java:104)
... 2 more

最佳答案

Ivy 可以用作 standalone java程序:

java -jar ivy.jar -retrieve "lib/[conf]/[artifact].[ext]"

retrieve 模式可用于根据 ivy 配置设置确定文件的安装位置

$ find lib -type f
lib/core/commons-lang.jar
lib/plugin1/commons-logging.jar
lib/plugin1/commons-codec.jar
lib/plugin2/commons-logging.jar
lib/plugin2/commons-cli.jar
lib/plugin3/commons-logging.jar

配置用作集体标签或依赖项分组。它们类似于 Maven 作用域,但更加灵活:

<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="demo"/>
<configurations>
<conf name="core" description="Core application dependencies"/>
<conf name="plugin1" description="Plugin 1 dependencies"/>
<conf name="plugin2" description="Plugin 2 dependencies"/>
<conf name="plugin3" description="Plugin 3 dependencies"/>
</configurations>
<dependencies>
<dependency org="commons-lang" name="commons-lang" rev="2.5" conf="core->default"/>
<dependency org="commons-codec" name="commons-codec" rev="1.4" conf="plugin1->default"/>
<dependency org="commons-cli" name="commons-cli" rev="1.2" conf="plugin2->default"/>
<dependency org="commons-logging" name="commons-logging" rev="1.1.1" conf="plugin1,plugin2,plugin3->default"/>
</dependencies>
</ivy-module>

如果您只想下载并安装一组 jar,到指定目录,您可以使用 confs 参数:

java -jar ivy.jar -retrieve "plugin1/[artifact].[ext]" -confs plugin1

最后,如果你还想使用编程API,你可以调用主类调用的run方法

http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/Main.java?view=markup

更新1

Groovy 内置了对调用 ivy 任务的支持

import groovy.xml.NamespaceBuilder

def ant = new AntBuilder()
def ivy = NamespaceBuilder.newInstance(ant, 'antlib:org.apache.ivy.ant')

ivy.settings(file:"ivysettings.xml")
ivy.retrieve(pattern:"lib/[conf]/[artifact].[ext]")
ivy.report(toDir:'reports', graph:false)

更新2

要设置本地 Maven 存储库的位置,您需要使用 ivysettings.xml 文件。

<ivysettings>
<settings defaultResolver='nexus' />
<resolvers>
<ibiblio name='nexus' root='http://myhost.mydomanin.com:8081/nexus' m2compatible='true' />
</resolvers>
</ivysettings>

更新3

刚刚找到一篇详细介绍如何 invoke Ivy from Java 的文章

关于java - 以编程方式使用 IVY 依赖管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3955209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com