问题描述
我有一个版本,我必须解决通过Apache常春藤非标准文物的问题。
I have a problem with a build where I have to resolve non-standard artifacts through Apache Ivy.
问题:
- 我有两个工件的依赖关系(a.jar文件和-lib.jar)。
- 两个依赖来只是作为一个单一的安装程序(a_installer.jar)的一部分。
- 安装程序可以下载,嵌入式文物本身不是。
- 这是可能的操纵安装程序解包所需的依赖关系。
要求:
- 我必须解决/编译过程中下载的工件(我不能让安装程序或与我的code提取的文物)。
- 我不能使用存储库来存储提取的文物。
- 子类/扩展常春藤/不管是完全正常的。
有没有人解决了类似的问题,还是一些有用的信息分享?
Has anyone solved a similar problem, or some helpful information to share?
或者,也许我在错误的方式接近这一问题?从我迄今发现在网络上,人们似乎用常春藤只是事后手动下载的文件的和后处理它们(用Ant /其他),并没有真正解决更复杂的依赖的内常春藤。
Or maybe I'm approaching the problem in the wrong way? From what I found so far on the web, people seem to use Ivy just to download files and post-process them manually (with Ant/whatever) after the fact, and not actually resolving more complicated dependencies within Ivy.
感谢
的 PS:我不关心是否安装程序也放进常春藤下载缓存,但我想下载安装程序只有一次(而不是依赖两种)的
推荐答案
通过调用问题常春藤:检索是,你需要在还增加一个神器的标签你的的ivy.xml (与URL完成),以检索一个Maven程序存储库未找到的依赖...
The problem with a call to "ivy:retrieve" is that you need to also add an "artifact" tag in your ivy.xml (complete with URL) in order to retrieve a dependency not found in a Maven respository...
我不喜欢这样的原因有两个。
I don't like this for two reasons
- 的的ivy.xml 的应该只是声明你的依赖,而不是它们的位置。
- 需要在的build.xml 的处理第三方软件包 产生额外的定制逻辑
- The ivy.xml should just declare your dependencies, not their locations.
- Need additonal custom logic in the build.xml to handle the 3rd party package
在理想情况下它应该是决定如何下载各种罐子,这就是为什么我喜欢的打包解析您的存储库设置。即使我希望库不在Maven的,我可以配置常春藤来处理它。
Ideally it should be your repository settings that decide how to download the various jars, that is why I like the packager resolver. Even if the library I want is not in Maven, I can configure ivy to handle it.
以下是开启项目进入长春藤的依赖(在SourceForge上的一个例子,我找不到它Maven的)
The following is an example of turning the jreleaseinfo project into an ivy dependency (hosted in sourceforge, I couldn't find it in Maven)
的的ivy.xml 的:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ivy-module version="2.0">
<info organisation="com.myspotontheweb" module="ivy_packager"/>
<dependencies>
<dependency org="ch.oscg" name="jreleaseinfo" rev="1.3.0"/>
</dependencies>
</ivy-module>
声明两个解析器。默认值是Maven2的,另一种是的打包配置为在本地查找指令。 (见常青藤项目综合报道)
Declare two resolvers. Default is Maven2, the other is a packager configured to look locally for instructions. (See also the Ivy Roundup project)
的 ivysettings.xml 的
<ivysettings>
<settings defaultResolver="maven2"/>
<resolvers>
<ibiblio name="maven2" m2compatible="true"/>
<packager name="repackage" buildRoot="${user.home}/.ivy2/packager/build" resourceCache="${user.home}/.ivy2/packager/cache">
<ivy pattern="file:///${basedir}/repository/[organisation]/[module]/[revision]/ivy.xml"/>
<artifact pattern="file:///${basedir}/repository/[organisation]/[module]/[revision]/packager.xml"/>
</packager>
</resolvers>
<modules>
<module organisation="ch.oscg" name="jreleaseinfo" resolver="repackage"/>
</modules>
</ivysettings>
神奇的是包含在打包文件。在解析时,这将被用于产生一个ANT脚本下载和提取所需的罐子。
(没有必要把这种逻辑到您的的build.xml 的)
的资料库/ ch.oscg / jreleaseinfo / 1.3.0 / packager.xml 的
<packager-module version="1.0">
<property name="name" value="${ivy.packager.module}"/>
<property name="version" value="${ivy.packager.revision}"/>
<property name="zipname" value="${name}-${version}"/>
<resource dest="archive" url="http://sourceforge.net/projects/jreleaseinfo/files/jreleaseinfo/jreleaseinfo%201.3.0/jreleaseinfo-1.3.0.zip/download" sha1="9386d92758e627d04c2480b820731fd538b13a3f" type="zip"/>
<build>
<move file="archive/${zipname}/${zipname}.jar" tofile="artifacts/jars/${name}.jar"/>
</build>
</packager-module>
要减少文件的数量我省略模块的的ivy.xml 的。这似乎除非你想声明它的许可证和其他属性,应该在一个公共仓库present是可选的。
To reduce the number of files I omitted the module's ivy.xml. This appears to be optional unless you want to declare it's licence and other attributes that should be present in a public repository.
这篇关于Apache的常青藤:解决依赖嵌入安装的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!