我正在尝试常春藤:将jogl和gluegen从maven安装到我当地的存放处。我无法正确安装本机依赖项。
我的ivysettings是
<ivysettings>
<settings defaultResolver="central"
defaultConflictManager="all"
/>
<caches defaultCacheDir="${ivy.cache.dir}"
artifactPattern="[organisation]/[module]/[type]s/[artifact]-[revision](-[classifier]).[ext]"
/>
<resolvers>
<ibiblio name="central" m2compatible="true"
pattern="[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"
/>
<filesystem name="depository">
<ivy pattern="${dest.repo.dir}/[organisation]/[module]/ivys/ivy-[revision](-[classifier]).xml" />
<artifact pattern="${dest.repo.dir}/[organisation]/[module]/[type]s/[artifact]-[revision](-[classifier]).[ext]" />
</filesystem>
</resolvers>
</ivysettings>
我的安装目标是
<ivy:install settingsRef="ivy.settings"
organisation="org.jogamp.jogl" module="jogl-all-main" revision="2.1.5-01"
from="${from.resolver}" to="${to.resolver}" transitive="true" overwrite="true" />
其中from.resolver为central
,to.resolver为depository
。
分类器例如是native-windows-i586,native-linux-armv6等。有问题的pom文件位于http://repo1.maven.org/maven2/org/jogamp/jogl/jogl-all-main/2.1.5-01/jogl-all-main-2.1.5-01.pom
我正确地解决了jogl-all-main。解析依赖关系后,只解析pom文件中的最后一个,即jogl-all-2.1.5-01-natives-windows-i586.jar。有没有办法使用常春藤:安装任务从maven中央存储库安装到我的本地存储库?
答案 0 :(得分:10)
简短的回答是,ivy对与Maven模块关联的其他工件文件的支持非常有限。
我为重复自己而道歉,但最好建议您运行Maven存储库管理器来缓存远程Maven存储库。这避免了在不同格式之间进行折衷的必要性。
远程Maven POM没有明确列出其模块的工件。可能的分类器值的数量没有限制....可以做出的唯一假设是模块可能包含一个额外的&#34; javadoc&#34;或&#34;来源&#34;神器。 (在开源项目中很常见)。
Maven documentation描述分类器如下:
分类器:分类器可以区分工件 从同一个POM构建但内容不同。这是一些 可选和任意字符串 - 如果存在 - 附加到 工件名称紧跟在版本号之后。
作为此元素的动机,请考虑一个项目 提供了一个针对JRE 1.5的工件,但同时也是一个 仍然支持JRE 1.4的工件。第一件神器可能是 配备分类器jdk15,第二个配jdk14等 客户可以选择使用哪一个。
分类器的另一个常见用例是需要附加 项目主要工件的辅助工件。如果你浏览了 Maven中央存储库,你会注意到分类器的来源 和javadoc用于部署项目源代码和API文档 以及打包的类文件。
常春藤存储库的工作方式不同。该模块的常春藤文件有publications section,明确列出了模块的内容。
为了更深入地了解常春藤如何解释Maven存储库,我建议发布以下帖子。
以下示例使用retrieve任务将下载的依赖项写入所需的存储库格式。结果是缺少校验和文件,但这可能无关紧要。
├── build.xml
├── ivy.xml
└── target
└── repo
└── org
└── jogamp
└── jogl
├── jogl-all
│ └── 2.1.5-01
│ ├── jogl-all-2.1.5-01.jar
│ ├── jogl-all-2.1.5-01-javadoc.jar
│ ├── jogl-all-2.1.5-01-natives-android-armv6.jar
│ ├── jogl-all-2.1.5-01-natives-linux-amd64.jar
│ ├── jogl-all-2.1.5-01-natives-linux-armv6hf.jar
│ ├── jogl-all-2.1.5-01-natives-linux-armv6.jar
│ ├── jogl-all-2.1.5-01-natives-linux-i586.jar
│ ├── jogl-all-2.1.5-01-natives-macosx-universal.jar
│ ├── jogl-all-2.1.5-01-natives-solaris-amd64.jar
│ ├── jogl-all-2.1.5-01-natives-solaris-i586.jar
│ ├── jogl-all-2.1.5-01-natives-windows-amd64.jar
│ ├── jogl-all-2.1.5-01-natives-windows-i586.jar
│ └── jogl-all-2.1.5-01-sources.jar
└── jogl-all-main
└── 2.1.5-01
├── jogl-all-main-2.1.5-01.jar
├── jogl-all-main-2.1.5-01-javadoc.jar
└── jogl-all-main-2.1.5-01-sources.jar
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<info organisation="com.myspotontheweb" module="demo"/>
<configurations>
<conf name="repo" description="Artifacts that make up local repository"/>
</configurations>
<dependencies>
<dependency org="org.jogamp.jogl" name="jogl-all-main" rev="2.1.5-01" conf="repo->default">
<artifact name="jogl-all-main"/>
<artifact name="jogl-all-main" e:classifier="sources"/>
<artifact name="jogl-all-main" e:classifier="javadoc"/>
</dependency>
<dependency org="org.jogamp.jogl" name="jogl-all" rev="2.1.5-01" conf="repo->default">
<artifact name="jogl-all"/>
<artifact name="jogl-all" e:classifier="sources"/>
<artifact name="jogl-all" e:classifier="javadoc"/>
<artifact name="jogl-all" e:classifier="natives-android-armv6"/>
<artifact name="jogl-all" e:classifier="natives-linux-amd64"/>
<artifact name="jogl-all" e:classifier="natives-linux-armv6"/>
<artifact name="jogl-all" e:classifier="natives-linux-armv6hf"/>
<artifact name="jogl-all" e:classifier="natives-linux-i586"/>
<artifact name="jogl-all" e:classifier="natives-macosx-universal"/>
<artifact name="jogl-all" e:classifier="natives-solaris-amd64"/>
<artifact name="jogl-all" e:classifier="natives-solaris-i586"/>
<artifact name="jogl-all" e:classifier="natives-windows-amd64"/>
<artifact name="jogl-all" e:classifier="natives-windows-i586"/>
</dependency>
</dependencies>
</ivy-module>
注意:
<project name="demo" default="install" xmlns:ivy="antlib:org.apache.ivy.ant">
<!--
================
Build properties
================
-->
<property name="repo.dir" location="target"/>
<!--
===========
Build repo
===========
-->
<target name="install" description="Download and install dependencies">
<ivy:retrieve pattern="${repo.dir}/[conf]/[orgPath]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"/>
</target>
</project>