2009-05-25 78 views
4

我有一个构建在那里我必须解决通过Apache常春藤非标准文物问题的依赖。的Apache常春藤:解决嵌入在安装

问题:

  • 我有两个工件(a.jar文件和-lib.jar)的依赖关系。
  • 这两个依赖项仅作为单个安装程序(a_installer.jar)的一部分。
  • 可以下载安装程序,嵌入的工件本身不是。
  • 可以操纵安装程序来解压所需的依赖关系。

要求:

  • 我必须解决/编译过程中下载的工件(我不能让安装程序或我的代码所提取的文物)。
  • 我无法使用存储库来存储提取的工件。
  • 子类/扩展常春藤/什么都很好。

有没有人解决了类似的问题,或一些有用的信息分享?

或者,也许我接近问题的方式是错误?从我迄今发现在网络上,人们似乎用常春藤只是下载文件和后处理让用户手动(使用Ant /其他)之后,其实并没有真正解决内常春藤更复杂依赖

感谢

PS:我不在乎安装是否也投入了常春藤下载缓存,但我想下载安装程序只有一次(而不是两个依赖)。

回答

-1

我认为这非常简单:'ivy:检索'a_installer,然后将a.j和a-lib解压缩到lib目录中(或任何你想要的地方)。这应该很容易与蚂蚁做?

我不得不怀疑是否有一些并发症,你没有提到阻止你这样做。

5

调用“ivy:retrieve”的问题在于,您还需要在ivy.xml(带有URL完整)中添加一个“artifact”标记以检索未在Maven中找到的依赖项程序存储库...

我不喜欢这样的原因有两个

  1. 的ivy.xml应该只是声明你的依赖,而不是它们的位置。
  2. 需要在构建产生额外的定制逻辑。XML办理第三方包

理想的情况下应该是决定如何下载各种罐子你的仓库设置,这就是为什么我喜欢的打包解析器。即使我想要的图书馆不在Maven中,我也可以配置ivy来处理它。

以下是打开jreleaseinfo项目进入长春藤依赖的例子(在SourceForge上,我找不到它的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,另一个是打包程序配置为在本地查找指令。 (参见常春藤综述项目)

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。这似乎是可选的,除非您想声明应该在公共存储库中存在的许可证和其他属性。

+0

IvyRoundup是一个公开包装商回购。但包装工正是要走的路。 – SEK 2011-02-15 11:14:45