如何在没有包信息的情况下使用jar文件?

时间:2010-02-23 17:02:09

标签: java jar javac

我有一个叫做“MyTools”的罐子。 jar位于c:\ data文件夹中。我在名为“UseTools.java”的同一文件夹中创建了一个新文件。现在我想在UseTools.java中使用MyTools.jar中的一些类。我试过这个,但似乎没有用:

import MyTools.*;    
public class UseTools
{
  public static void main(String[] args) 
  {
    MyTools.SomeClass foo = new SomeClass();
    SomeClass.doSomething();
  }
}

我尝试用以下方法编译:

javac -cp . UseTools.java

并收到此错误消息:

UseTools.java:1: package MyTools does not exist
import MyTools.*;
^
UseTools.java:7: package MyTools does not exist
        MyTools.SomeClass foo = new SomeClass()
                                     ^
2 errors

我没有在任何类中设置包名。

我是否必须在jar类中设置包名?

3 个答案:

答案 0 :(得分:4)

提及与问题标题更相关的内容: 在Java中,您无法从命名包中的代码访问默认包中的类。

这意味着,如果jar文件中的类不明确属于任何包,并且jar中的文件直接位于没有子文件夹的根文件夹中,则它们位于默认包中。这不是很详细,缺乏模块性和可扩展性,但技术上还不错。 然后,您只能使用默认包中的代码中的这些类。但这并不一定意味着它必须在同一个罐子里。如果你有多个src或类文件夹,它们都可以包含默认包中可以交互的类。 JAR文件中的组织和项目中的包结构彼此独立。

但是,我严格鼓励您使用明确的包裹信息。

答案 1 :(得分:1)

在MyTools.jar中应该有一个名为MyTools的包。在编译之前,您应该将jar添加到类路径中。

答案 2 :(得分:0)

您需要添加-cp file.jar而不是-cp。

后者只会获取.class文件。顺便说一句:为什么不使用像netbeans,eclipse或intelliJ一样的IDE?