1

我按照入门指南建立了一个项目。我必须使用常春藤。这些是我的依赖项:

    <dependencies>
    <dependency org="org.jboss.spec" name="jboss-javaee-all-6.0" rev="3.0.1.Final" conf="build->default" />

    <dependency org="org.jboss.arquillian.junit" name="arquillian-junit-container" rev="1.0.3.Final"  conf="test->default(*)" transitive="true"/>
    <dependency org="org.jboss.arquillian.junit" name="arquillian-junit-core" rev="1.0.3.Final"  conf="test->default(*)" transitive="true"/>

    <dependency org="org.jboss.weld.arquillian.container" name="arquillian-weld-ee-embedded-1.1" rev="1.1.2.Final" conf="test->default(*)" />
    <dependency org="org.jboss.weld" name="weld-core" rev="1.1.10.Final" conf="test->default(*)" />
    <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.4" conf="test->default(*)" />


</dependencies>

问题:虽然我映射到“*”,但 deps 没有传递解析。我必须手动添加每个罐子,就因为我被常春藤困住了吗?还是我错过了什么?

澄清:

我使用映射“myconf->default( )”transitive="true"。我这样读到:“获取依赖项的默认配置并将其映射到“myconf”。():如果依赖项不提供“默认”,则使用它提供的每个配置。所有这些都应该传递完成,这意味着每个子依赖项也将被映射。

但我得到的是:只有指定的罐子,以及运行测试时的大量 CNFE。我读到了 maven 项目中引用的 arquillian-container pom,我开始担心没有适用于 ivy 和 arquillian 的“开箱即用”依赖映射机制。如果有人可以确认这一点或提供我可以使用的工作(最佳:测试)依赖项配置,我很高兴。非常感谢!

4

1 回答 1

0

我建议您的 ivy 文件始终声明一组配置。配置是构建中 jar 的逻辑分组。

以下示例为典型 java 构建中使用的 3 个类路径创建配置:

  • 编译
  • 运行
  • 测试

(另请注意“扩展”关键字)

<ivy-module version="2.0">
    <info organisation="com.myspotontheweb" module="demo"/>

    <configurations>
        <conf name="compile" description="Required to compile application"/>
        <conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
        <conf name="test"    description="Required for test only" extends="runtime"/>
    </configurations>

    <dependencies>
        <!-- compile dependencies -->
        <dependency org="org.jboss.spec" name="jboss-javaee-all-6.0" rev="3.0.1.Final" conf="compile->default" />

        <!-- test dependencies -->
        <dependency org="org.jboss.arquillian.junit" name="arquillian-junit-container" rev="1.0.3.Final"  conf="test->default"/>
        <dependency org="org.jboss.arquillian.junit" name="arquillian-junit-core" rev="1.0.3.Final"  conf="test->default"/>
        <dependency org="org.jboss.weld.arquillian.container" name="arquillian-weld-ee-embedded-1.1" rev="1.1.2.Final" conf="test->default" />
        <dependency org="org.jboss.weld" name="weld-core" rev="1.1.10.Final" conf="test->default" />
        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.4" conf="test->default" />
    </dependencies>

</ivy-module>

然后,配置映射会将本地配置映射到远程配置,如下所示:

conf="compile->default"

远程“默认”配置通常是您所需要的,它将包括远程模块的编译依赖项。有关如何翻译 Maven 模块的更详细说明,我建议阅读以下答案:

最后,您的构建文件可以使用这些配置来创建填充的 ANT 类路径:

<target name="init" description="Use ivy to resolve classpaths">
    <ivy:resolve/>

    <ivy:report todir='build/ivy' graph='false' xml='false'/>

    <ivy:cachepath pathid="compile.path" conf="compile"/>
    <ivy:cachepath pathid="runtime.path" conf="runtime"/>
    <ivy:cachepath pathid="test.path"    conf="test"/>
</target>

“报告”任务对于记录类路径上每个 jar 的版本特别有用。

于 2012-11-21T21:27:17.590 回答