繁体   English   中英

IntelliJ:当JAR没有包时,如何使用外部JAR作为库

[英]IntelliJ: How to use external JAR's as a library, when the JAR's have no packages

此问题与为Coursera上提供的Princeton算法2课程设置IntelliJ环境有关。

我正在尝试将外部库(如JAR)导入到我的项目中。 我可以通过Project Structure > Libraries > New Project Library (the green plus sign)从Project Structure菜单添加JAR。 现在,我在src之下有一个类WordNet.java ,但是我只能使用默认包(即没有包)访问我的外部库。 我想创建用于组织代码的软件包,但是如何从软件包内部导入外部库? 是否有直接导入JAR的简单解决方案,或者我可以使用Maven或Grails? 为我所有的选项提供一个简单的答案将是很好的。

我具有以下项目结构,带有src目录, src/assignemnt1包和External Libraries/stdlib/stdlib.jar外部库:

智能项目

使用外部库WordNet.java类的代码如下:

public class WordNet {

    // constructor takes the name of the two input files
    public WordNet(String synsets, String hypernyms) {
        In read_synsets = new In(synsets);
        read_synsets.hasNextLine();

    }
}

其中Instdlib.jar下的类。 在默认软件包下,我可以不导入而使用In 不幸的是,如果我有WordNet.javasrc/assignment1 (内部assignment1包),我似乎无法导入In和IntelliJ要么没有提供进口的建议。 有没有办法在src/assignment1包内的WordNet.java使用stdlib.jar 还是我必须保留默认软件包?

Java语言规范禁止从未命名或默认的软件包中进行任何导入。

未命名包中的类型(第7.4.2节)没有规范名称,因此每种类型的导入声明中对规范名称的要求都意味着(a)无法导入未命名包中的类型,以及(b)静态成员无法导入未命名包中的类型。 因此,第7.5.1节,第7.5.2节,第7.5.3节和第7.5.4节都要求在未命名包中导入类型(或其静态成员)的任何尝试都产生编译时错误。

为了从默认包外部访问这些类而不修改库,您将需要使用反射。

另外,当您的类位于默认软件包中时不需要导入的原因是,当它们位于同一软件包中时不需要导入类。

恐怕这是不可能的。 具体来说,您不能将默认程序包“导入”到命名程序包中。 由于您使用的库的默认包中包含其类,因此,如果要使用该库,唯一的办法就是也使用默认包。

当然,您可以将库的类移到包中,但这是另一回事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM