【问题标题】:Why ivy doesn't compile my class?为什么常春藤不编译我的课程?
【发布时间】:2016-02-12 12:51:24
【问题描述】:

我正在使用 ANT 和 IVY 来解决依赖关系并构建项目。我必须编写一个 selenium 测试用例,所以我在 IVY 文件中包含了 selenium 依赖项,如下所示:

<dependency org="org.seleniumhq.selenium" name="selenium-java" rev="2.48.2"/>

IVY 能够下载依赖项,但是当我使用 ANT 编译项目时,它失败并出现以下错误:

    cannot find symbol
    [javac] symbol  : class WebDriver
    [javac] location: class com.barclays.test.selenium.TestSelenium
    [javac]         WebDriver driver = new FirefoxDriver();

所以请告诉我我缺少的任何东西。

编辑:

build.xml 的一部分:

<target name="init">
        <ivy:resolve />
        <ivy:cachepath pathid="compile.path" conf="compile" />
        <ivy:cachepath pathid="test.path" conf="test" />
    </target>

    <target name="clean">
        <delete dir="${target.dir}" />
    </target>

    <target name="prepare" depends="clean" description="Create working dirs and copy static files to work dir">
        <mkdir dir="${target.dir}/WEB-INF/classes" />
        <mkdir dir="${target.dir}/WEB-INF/classes-test" />
        <!-- Copy static HTML and JSP files to work dir -->
        <copy todir="${target.dir}">
            <fileset dir="${web.home}" />
        </copy>
    </target>

    <target name="compile" depends="prepare, init" description="Compile Java sources and copy to WEB-INF/classes dir">
        <javac srcdir="${src.dir}" includeantruntime="false" debug="true" classpathref="compile.path" destdir="${target.dir}/WEB-INF/classes">
        </javac>

        <javac srcdir="${test.dir}" includeantruntime="false" debug="true" classpathref="test.path" destdir="${target.dir}/WEB-INF/classes-test">
            <classpath>
                <pathelement location="${target.dir}/WEB-INF/classes" />
            </classpath>
        </javac>

        <copy todir="${target.dir}/WEB-INF/classes">
            <fileset dir="${src.dir}" excludes="**/*.java" />
        </copy>

    </target>

还有 ivy.xml:

<ivy-module version="2.0">
    <info organisation="org.apache" module="test-ivy" />

    <configurations>
        <conf name="runtime" />
        <conf name="compile" extends="runtime" description="provides the 
compiler" />
        <conf name="test"    description="Required for test only" extends="runtime"/>
    </configurations>

    <dependencies>
        <dependency org="javax.servlet" name="servlet-api" rev="2.5" />
        <dependency org="junit" name="junit" rev="4.12" />
        <dependency org="org.seleniumhq.selenium" name="selenium-java" rev="2.48.2" conf="test-java->default"/>
  <dependency org="log4j" name="log4j" rev="1.2.16" conf="compile->*" />
    </dependencies>
</ivy-module>

log4j 也是如此。我已经添加了依赖,但是当我尝试创建 Logger 对象时,eclipse 在使用代码辅助时没有列出 log4j 的记录器。

谢谢

【问题讨论】:

  • 请发布 build.xml
  • 有点大,所以我添加了编译目标
  • &lt;dependency org="org.seleniumhq.selenium" name="selenium-java" rev="2.48.2" conf="test-java-&gt;default"/&gt; 也许?

标签: java ant ivy


【解决方案1】:

在您的 build.xml 中,您不是使用测试类路径编译测试类,而是使用编译类路径。

Classpathref 应该设置为test.path

<javac srcdir="${test.dir}" includeantruntime="false" debug="true" classpathref="test.path" destdir="${target.dir}/WEB-INF/classes-test">
            <classpath>
                <pathelement location="${target.dir}/WEB-INF/classes" />
            </classpath>
        </javac>

并且您应该定义每个 ivy 依赖项的范围。像这样:

 <!-- Compile time-->
    <dependency org="log4j" name="log4j" rev="1.2.14" conf="compile->*"/>

 <!-- test time-->
    <dependency org="log4j" name="log4j" rev="1.2.14" conf="test->*"/>

【讨论】:

  • 做了你提到的更改并运行了ant build,但仍然是同样的错误
  • 对于firefox webdriver你还需要mvnrepository.com/artifact/org.seleniumhq.selenium/…这个依赖
  • 但它也不能解决 WebDriver 吗?配置有什么问题吗?
  • 奇怪,org.seleniumhq.selenium » selenium-java 应该包含所有依赖项(WebDriver 也是如此)。您可以将修改后的配置发布到某处吗?
  • 我已经更新了问题中修改后的conf和build.xml
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2014-12-31
  • 2010-12-31
  • 2019-11-06
  • 2018-07-07
  • 1970-01-01
相关资源
最近更新 更多