【问题标题】:Compiling with Ant用 Ant 编译
【发布时间】:2013-03-12 21:13:08
【问题描述】:

我有两个应该进行黑盒测试的 .class 文件。这些都在一个包one.two.three 中。我的测试也在同一个包中。在同一个包中还有第三个 .class 文件,其目的是为我应该测试的 Orders 类保存一个枚举变量。在eclipse中,我可以通过直接导入枚举来让Orders的junit测试工作,例如

import one.two.three.Orders.ShippingMethod;

如果我尝试使用 Ant 或通过命令行执行此操作,我会收到错误“包 one.two.three.Orders 不存在”。如果我将导入语句更改为

import one.two.three.*;

Ant、Eclipse 和终端找不到我拥有的任何类。我需要用 Ant 编译和运行测试用例。课程在bin/one/two/three 任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: java eclipse ant junit


    【解决方案1】:

    导入Orders,因为它是类,并假设ShippingMethod 是该类中的枚举,引用其类型的正确方法是Orders.ShippingMethod

    在 Eclipse 中尝试导入类的内部类型有时会很奇怪。这可能是由于 Eclipse 没有使用打包在 jdk 中的 javac 编译器,而 Ant 使用了(它必须这样做,因为 Ant 没有提供嵌入式编译器)。

     import one.two.three.Orders;
    
    
     public class Whatever {
    
        private Orders.ShippingMethod shipMethod;
    
     }
    

    这应该适用于所有事情,因为它是正确的方法。

     import one.two.three.Orders.ShippingMethod;
    

    很容易混淆大多数编译器,因为没有

     one/two/three/Orders/ShippingMethod.class
    

    文件,这意味着类加载器在运行时不会找到它。

    我敢打赌,这是 Eclipse 嵌入式编译器中的一个错误,因为我见过不少。从好的方面来说,Eclipse 嵌入式编译器的存在是为了在代码编辑和 Eclipse 之间提供更快、更紧密的集成。在黑暗的一面,这意味着有时 Eclipse 编译器和javac 编译器不同。如果有疑问,javac 编译器可能是正确的。

    【讨论】:

    • thx edwin,当我导入 one.two.three.Orders 时,它说在包 one.two.three 中找不到符号 Orders
    • Orders 是 public 类吗?如果没有,您可能会遇到公共的、私有的、受保护的、 障碍...
    • 这是一个测试班的作业,教授只给了我们.class文件。他给我们的指示是.class文件和测试文件必须在同一个包中才能使用
    • @Steve 尝试在类文件上运行 javap。它采用与 java 命令相同的通用参数。它应该打印出有关该类的足够详细信息,以确定其中的真正内容。希望在那篇文章和这篇文章之间,你会得到你需要的东西。
    • 非常感谢 Edwin,我一直认为 eclipse 是 java 之神,而且是万无一失的。在放弃它并通过命令行运行之后,我能够微调几个错误并让它工作。再次感谢
    【解决方案2】:

    您需要设置类路径。

    我不太了解 Eclipse(我使用 NetBeans),但我点击了Libraries -> add JAR/Folder

    对于命令行,需要指定类路径

    java -cp path/to/my/files (...)

    【讨论】:

      猜你喜欢
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2014-04-05
      • 2012-05-02
      • 2013-07-03
      • 1970-01-01
      相关资源
      最近更新 更多