我一直在寻找解决问题的方法,但我遇到的所有其他帖子要么不起作用,要么与我的情况不符,所以希望有人可以给我一些见解
我有一个用ant构建的库,它输出2个jar文件,一个正常包含库的编译版本,另一个只包含源文件。
此库已上传到我们的Nexus存储库,包装设置为jar。对于实际的jar文件,我将扩展名设置为jar并将分类器留空。对于源jar,我将分类器设置为jar的扩展源和扩展名。
无论我对ivy.xml文件做什么,我都无法下载源jar。根据我在其他地方读过的帖子,我尝试添加:
conf="*->default,sources"
到我的依赖,但后来我收到一个错误:
configuration not found in org#name;version: 'sources'
所以这基本上是希望我的库在某个地方将源定义为配置?我认为它只会发现这样一个事实:分类器设置为存储库中的源代码还有另一个人工制品。
任何人都可以向我提出我可能做错的其他建议,无论是我将我的库发布到Nexus的方式,还是我在Ivy文件中设置依赖声明的方式。
这是基本的Ivy.xml文件,我在这里定义了我对Nexus中放置的库的依赖。
<ivy-module version="2.0">
<info organisation="${ivy.organisation}" module="moduleName" />
<configurations>
<conf name="pda" description="moduleName for PDA"/>
<conf name="server" description="moduleName for server"/>
</configurations>
<dependencies>
<!-- Internal -->
<dependency name="utility" org="${ivy.organisation}" rev="latest.integration" conf="${ivy.configuration}"/>
<dependency name="myLib" org="my.org" rev="0.0.+"/>
</dependencies>
</ivy-module>
在回复下面的评论时,我的build.properties中的ivy.configuration属性设置为pda。对于Eclipse,我创建了一个属性文件,并将ivy.configuration设置为pda(然后在Eclipse中的Ivy设置中引用此属性文件)。
我得到的错误信息是:
Some projects fail to be resolved
Impossible to resolve dependencies of ${ivy.organisation}#moduleName;working@host
unresolved dependency: my.org#myLib;0.0.+: configuration not found in my.org#myLib;0.0.0: 'sources'. It was required from ${ivy.organisation}#moduleName;working@host pda
更新 这是已解析的ivy.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0">
<info organisation="my.org"
module="myLib"
revision="0.0.0"
status="release"
publication="20120419131909"
default="true"
/>
<configurations>
<conf name="default" visibility="public"/>
</configurations>
<publications>
<artifact name="myLib" type="jar" ext="jar" conf="default"/>
</publications>
</ivy-module>
这显然解释了为什么它找不到“来源”的内容。但我的印象是应该自动添加来源conf,因为我已将源添加到Nexus。
答案 0 :(得分:2)
发布工件时,您应该告诉Ivy有关配置的信息。例如:
<ivy-module version="2.0">
<info organisation="apache" module="commons-lang" revision="2.5" status="release"/>
<configurations>
<conf name="binary" description="provide only binary files"/>
<conf name="development" extends="binary" description="provide binary files with javadoc and sources"/>
</configurations>
<publications>
<artifact name="commons-lang" ext="jar" conf="binary" type="jar"/>
<artifact name="commons-lang-javadoc" ext="jar" conf="development" type="javadoc"/>
<artifact name="commons-lang-sources" ext="jar" conf="development" type="source"/>
</publications>
</ivy-module>
如您所见,commons-lang.jar以二进制配置发布。但是commons-lang-sources和commons-lang-javadoc在开发配置下发布。
检索依赖项时,应使用以下ivy.xml:
<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
<info organisation="bitrete" module="strongpoint" status="development"/>
<configurations>
<conf name="binary" description="provide only binary files"/>
<conf name="development" extends="binary" description="provide binary files with javadoc and sources"/>
</configurations>
<publications>
<artifact name="strongpoint" ext="jar" type="jar"/>
</publications>
<dependencies>
<dependency org="apache" name="commons-lang" rev="2.5"/>
</dependencies>
</ivy-module>
并在使用Ant解析时提供所需的配置:
<property name="ivy.conf" value="binary"/>
...
<property name="ivy.conf" value="development"/>
...
<ivy:resolve conf="${ivy.conf}"/>
答案 1 :(得分:2)
因此经过大量的游戏后,我似乎终于找到了解决方案。如果我以下列方式声明我的依赖:
<dependency name="myLib" org="my.org" rev="0.0.+">
<artifact type="jar"/>
<artifact type="source" m:classifier="sources" conf="pdaDev->sources"/>
</dependency>
然后我可以添加一个新的配置(例如上面的pdaDev),它链接到依赖项的源配置。使用Eclipse时,我可以告诉它使用pdaDev配置,它确实也会引入源jar(如果存在)。
似乎奇怪的是,Nexus似乎没有在已解析的常春藤文件中包含源配置,除非明确要求它像我上面所做的那样。
答案 2 :(得分:0)
在常春藤文件中创建两个配置。一个用于应该在类路径上的二进制文件,另一个用于源jar文件。
其次,在依赖项上创建两个配置映射:
<ivy-module version="2.0">
<info organisation="org.demo" module="demo"/>
<configurations>
<conf name="compile" description="jars used for compilation classpath"/>
<conf name="sources" description="Source jars"/>
</configurations>
<dependencies>
<dependency org="org.slf4j" name="slf4j-simple" rev="1.6.4" conf="compile->default;sources->sources"/>
</dependencies>
</ivy-module>
注:
在您的ANT版本中,您可以使用以下配置:
<target name="init">
<ivy:resolve/>
<!-- Populate a compile classpath for use with javac task -->
<ivy:cachepath pathid="compile.path" conf="compile"/>
<!-- Put source jars in the src directory -->
<ivy:retrieve pattern="src/[artifact]-[revision](-[classifier]).[ext]" conf="sources"/>
</target>