6

我有一个名为“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 类中设置一个包名吗?

4

3 回答 3

5

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

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

但是,我强烈建议您使用明确的包信息。

于 2014-10-08T05:28:26.477 回答
1

In your MyTools.jar there should be a package with the name MyTools. And before compiling you should add the jar to the classpath.

于 2010-02-23T17:42:00.233 回答
0

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

后一个将只拾取 .class 文件。顺便说一句:为什么不使用像 netbeans、eclipse 或 intelliJ 这样的 IDE?

于 2010-02-23T17:04:57.343 回答