使用 Ant 和 Ivy 解析 javadoc 文件 [英] resolving javadoc files with Ant and Ivy
问题描述
我希望 Ivy 获取 log4j .jar 和 JavaDocs.现在,我处于死胡同.如果我在 ivy.xml 中使用它......
I'd like Ivy to fetch both the log4j .jar and JavaDocs. Right now, I am at a dead end. When If I use this in my ivy.xml ...
<dependency org="log4j" name="log4j" rev="1.2.16"/>
...然后我就得到了 .jar 文件.但是当使用这个 ivysettings.xml ...
... then I just get the .jar file. But when using this ivysettings.xml ...
<?xml version="1.0" encoding="UTF-8"?>
<ivysettings>
<settings
defaultResolver="default"
defaultConflictManager="all" />
<resolvers>
<url name="default" m2compatible="true">
<artifact pattern="http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
<artifact pattern="http://repo2.maven.org/maven2/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
</url>
</resolvers>
</ivysettings>
...还有这个ivy.xml...
... and this ivy.xml ...
<?xml version="1.0" encoding="UTF-8"?>
<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="foo" module="bar"/>
<dependencies>
<dependency org="log4j" name="log4j" rev="1.2.16">
<artifact name="log4j" type="jar" ext="jar"/>
<artifact name="log4j" type="javadoc" ext="jar"/>
</dependency>
</dependencies>
</ivy-module>
...然后我收到此错误消息:java.lang.RuntimeException:模块 log4j#log4j;1.2.16 的多个工件被检索到同一个文件!更新检索模式以修复此错误.
... then I get this error message: java.lang.RuntimeException: Multiple artifacts of the module log4j#log4j;1.2.16 are retrieved to the same file! Update the retrieve pattern to fix this error.
我在这里缺少什么?如何让 Ivy 解析 JavaDoc 和 .jar 文件?
What I am missing here? How can I get Ivy to resolve both the JavaDoc and the .jar files?
感谢到目前为止所有快速和详细的回复.这是我更新的ivy.xml:
edit: Thanks for all the fast and detailed responses so far. This is my updated ivy.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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="foo" module="bar"/>
<configurations>
<conf name="default" visibility="public"/>
<conf name="compile" visibility="public"/>
<conf name="master" visibility="public"/>
<conf name="javadoc" visibility="public"/>
</configurations>
<dependencies>
<dependency org="log4j" name="log4j" rev="1.2.16" conf="default->master,javadoc"/>
<dependency org="javax.servlet" name="servlet-api" rev="2.5" />
<dependency org="com.someother" name="proprietary-core" rev="1.2.3" force="true"/>
<dependency org="com.someother" name="proprietary" rev="1.2.3" force="true"/>
<dependency org="com.someother" name="scanner" rev="1.0" force="true"/>
</dependencies>
</ivy-module>
现在我收到此错误消息:
Now I get this error message:
Buildfile: D:\workspace\foobar\build.xml
resolve:
[ivy:retrieve] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: loading settings :: file = D:\workspace\foobar\ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: foo#bar;working@myhost
[ivy:retrieve] confs: [default, compile, master, javadoc]
[ivy:retrieve] found log4j#log4j;1.2.16 in internal
[ivy:retrieve] found javax.servlet#servlet-api;2.5 in internal
[ivy:retrieve] found com.someother#proprietary-core;1.2.3 in internal
[ivy:retrieve] found com.someother#proprietary;1.2.3 in internal
[ivy:retrieve] found com.someother#scanner;1.0 in internal
[ivy:retrieve] :: resolution report :: resolve 332ms :: artifacts dl 10ms
---------------------------------------------------------------------
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| default | 5 | 0 | 0 | 0 || 4 | 0 |
| compile | 4 | 0 | 0 | 0 || 4 | 0 |
| master | 4 | 0 | 0 | 0 || 4 | 0 |
| javadoc | 4 | 0 | 0 | 0 || 4 | 0 |
---------------------------------------------------------------------
[ivy:retrieve]
[ivy:retrieve] :: problems summary ::
[ivy:retrieve] :::: WARNINGS
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: UNRESOLVED DEPENDENCIES ::
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve] :: log4j#log4j;1.2.16: configuration not found in log4j#log4j;1.2.16: 'master'. It was required from foo#bar;working@myhost default
[ivy:retrieve] ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]
[ivy:retrieve]
[ivy:retrieve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
Maven 范围似乎有问题.但我到底错过了什么?
There seems to be a problem with the Maven scopes. But what exactly am I missing here?
推荐答案
问题在于您在 ivy 检索任务中使用的模式.它需要包含可选的classifier"属性以确保文件名是唯一的:
The problem is the pattern you are using in the ivy retrieve task. It needs to include the optional "classifier" attribute to ensure the file name is unique:
<ivy:retrieve pattern="lib/[conf]/[artifact](-[classifier]).[ext]"/>
Classifier 是 Maven 的东西,用于识别与 Maven 模块相关的其他人工制品.
Classifier is a Maven thing, is used to identify additional artefacts associated with a Maven module.
无需复杂的常春藤设置.配置映射控制从其他模块下载哪些人工制品.
No need for complicated ivy settings. Configuration mappings control which artefacts are downloaded from other modules.
删除 ivysettings.xml 文件并在您的 ivy.xml 中尝试以下操作:
Remove the ivysettings.xml file and try the following in your ivy.xml:
<dependency org="log4j" name="log4j" rev="1.2.16" conf="default->master,javadoc"/>
这会导致下载以下文件:
This results in the following files being downloaded:
- log4j-1.2.16.jar
- log4j-1.2.16-javadoc.jar
它是如何工作的?
对于 Maven 模块,ivy 创建一个匹配每个标准 Maven 范围的配置:
For Maven modules ivy creates a configuration matching each of the standard Maven scopes:
- master : 仅主 jar
- compile : main jar, 加上用于编译的 jars (这也是默认"范围)
- runtime : 主 jar,加上用于编译、运行时的 jar
- test : 主 jar,加上用于编译、运行时、测试的 jar
另外为模块发布的每个额外的人工制品(或分类器)创建一个配置:
and additionally creates a configuration for each additional artefact (or classifier) published by the module:
- 来源
- javadoc
这使您可以混合搭配.
这篇关于使用 Ant 和 Ivy 解析 javadoc 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!