我有一个叫做“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类中设置包名?
答案 0 :(得分:4)
提及与问题标题更相关的内容: 在Java中,您无法从命名包中的代码访问默认包中的类。
这意味着,如果jar文件中的类不明确属于任何包,并且jar中的文件直接位于没有子文件夹的根文件夹中,则它们位于默认包中。这不是很详细,缺乏模块性和可扩展性,但技术上还不错。 然后,您只能使用默认包中的代码中的这些类。但这并不一定意味着它必须在同一个罐子里。如果你有多个src或类文件夹,它们都可以包含默认包中可以交互的类。 JAR文件中的组织和项目中的包结构彼此独立。
但是,我严格鼓励您使用明确的包裹信息。
答案 1 :(得分:1)
在MyTools.jar中应该有一个名为MyTools的包。在编译之前,您应该将jar添加到类路径中。
答案 2 :(得分:0)
您需要添加-cp file.jar而不是-cp。
后者只会获取.class文件。顺便说一句:为什么不使用像netbeans,eclipse或intelliJ一样的IDE?