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

vik*_*sde 5 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试用以下方法编译:

javac -cp . UseTools.java
Run Code Online (Sandbox Code Playgroud)

并收到此错误消息:

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
Run Code Online (Sandbox Code Playgroud)

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

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

mkr*_*erx 5

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

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

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


Kar*_*ell 0

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

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