【问题标题】:Arquillian Weld-EE test setup with ant+ivy使用 ant+ivy 的 Arquillian Weld-EE 测试设置
【发布时间】:2012-11-09 03:27:10
【问题描述】:

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

    <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”。():如果依赖项不提供“默认”,则使用它提供的每个配置。所有这些都应该是done 传递,意味着每个子依赖也将被映射。

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

【问题讨论】:

  • 我认为这不会被误解,但仍然:我知道常春藤中的配置机制,我刚刚发布了我的依赖项块,因为我映射我的部门对于这个问题并不重要,但是我从哪里得到它们...我没有正确传递,我认为这是由于 JBoss 人员使用的一些非常 maven 特定的 POM 配置...
  • 我通常从不使用传递选项,因为 Maven 模块 on 可以映射到远程“默认”或“主”配置来启用和禁用传递依赖项。第二个可能的混淆是您映射配置的方式:“test->default(*)”。在 Maven 模块的上下文中,您不需要括号语法。通常所有的常春藤模块都会有一个“默认”配置。总之,我认为您需要准确说明缺少哪些传递依赖项

标签: ant junit ivy jboss-arquillian weld


【解决方案1】:

我建议您的 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 的版本特别有用。

【讨论】:

  • 我更新了我的问题,这与 ivy confs 无关。您是否使用您提供的设置管理您运行 arquillian 测试?
  • @JanGalinski 这个问题是常春藤问题。显然,您的问题是缺少与 arquillian 项目相关的库。我不使用该代码。如果您列出缺少的内容,那么有人可以为您做一些分析。
猜你喜欢
  • 2012-09-04
  • 2017-06-20
  • 2012-04-01
  • 2012-01-12
  • 2011-06-23
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 2011-05-17
相关资源
最近更新 更多