[英]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();
}
}
其中In
是stdlib.jar
下的类。 在默认软件包下,我可以不导入而使用In
。 不幸的是,如果我有WordNet.java
下src/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.