本文介绍了Apache的常青藤:解决依赖嵌入安装的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个版本,我必须解决通过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


  1. 的ivy.xml 的应该只是声明你的依赖,而不是它们的位置。

  2. 需要在的build.xml 的处理第三方软件包
  3. 产生额外的定制逻辑
  1. The ivy.xml should just declare your dependencies, not their locations.
  2. 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的常青藤:解决依赖嵌入安装的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-25 05:43