【问题标题】:Why doesn't the Java compiler download imported packages?为什么 Java 编译器不下载导入的包?
【发布时间】:2011-10-19 00:04:06
【问题描述】:

我正在尝试在我的本地计算机上运行 Lucene Java 应用程序。我得到这个编译错误:

package org.apache.commons.digester does not exist

因为

import org.apache.commons.digester.Digester;

编译器不是从网上下载包的吗? 如果没有,我该怎么办?

【问题讨论】:

    标签: java package javac


    【解决方案1】:

    不,编译器不会从 Internet 下载包。如果您正确配置它们并将包添加到项目依赖项中,则某些构建管理工具(例如Maven)会执行此操作。但是如果没有这样的工具,您应该手动下载 jar 并将其放在编译器类路径中。

    【讨论】:

    • 嗯好的。我实际上已经下载了 Apache Lucene,我想用它运行一个应用程序。我真的需要添加像 Maven 这样的管理工具吗?我的文件夹中有一个 build.xml 和 lucene-core-3.0.3.jar
    • @Patrick,如果你已经有 Lucene,你的项目很小,而且你预计未来不会有太多新的依赖,你可以不用 Maven。只需确保编译器在编译时可以访问 Lucene jar,在运行应用程序时也可以访问 JVM(类路径)。
    • @Patrick:无论如何你都需要下载 Digester,因为它不包含在 Lucene 中,而只是一个依赖项。
    • @BalusC 好的,我已经下载了 Digester。现在,我怎样才能让编译器可以访问它。这就是我现在正在做的,但我得到了同样的错误:javac -cp commons-digester-2.1/commons-digester-2.1.jar myApp.java
    【解决方案2】:

    如果您使用的是 Maven,您可以通过添加以下依赖项来下载该库:

    <dependency>
    <groupId>commons-digester</groupId>
    <artifactId>commons-digester</artifactId>
    <version>2.1</version>
    

    否则你必须下载它here。然后只需将 .jar 添加到您的 Buildpath。

    【讨论】:

      【解决方案3】:

      如果您使用 maven 并将其添加为依赖项,那么它将为您下载它。否则

      您可以从here 下载相应版本。并将其添加到您应用的类路径中

      【讨论】:

        【解决方案4】:

        不,当您导入包时,编译器不会从 Internet 下载包。 naming convention for packages 使它们看起来像 URL,但实际上不是,编译器当然不会尝试下载依赖项。

        这个想法是,如果 Java 库的所有创建者都遵守此约定并在包名中使用他们的域名,则可以避免来自不同作者的库之间的类名冲突。然而,如前所述,这只是一个命名约定,与依赖管理有关。

        Maven 这样的一些构建工具具有复杂且相对易于使用的dependency management mechanisms. 流行的Ant 构建工具也通过Ivy dependency manager. 具有此功能

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-02
          • 2018-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多