java - 导入 jar 不起作用

标签 java build-process classpath

我正在尝试做一些非常简单的事情。此时我只想构建一个包含适当类的文件。

我有一个名为 Promomon.java 的文件

class Promomon {
  public static void main(String[] args)
  {
    System.out.println("Hello World!");
  }
}

简单简单,那里一切都很好。我可以编译和运行,我看到了 Hello World!。

现在我添加我希望使用的类。

import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

这直接取自 Apache POI 文档。

  • 我使用的是 Ubuntu 10.04。我使用 synaptic 安装了 java (apt-get install openjdk-6-jdk)
  • Java 安装在/usr/lib/jvm/java-6-openjdk/jre/
  • JAVA_HOME 设置为“/usr/lib/jvm/java-6-openjdk/jre/”

    $ echo $JAVA_HOME
    /usr/lib/jvm/java-6-openjdk/jre/

  • 我自己使用 Ant 构建了 POI jar,没问题。

  • 我将 jars 放入 java 的 lib 目录中。 (/usr/lib/jvm/java-6-openjdk/jre/lib/)

    $ ls -l/usr/lib/jvm/java-6-openjdk/jre/lib/poi*
    -rw-r--r-- 1 root root 1539296 2010-09-08 12:40/usr/lib/jvm/java-6-openjdk/jre/lib/poi-3.6-20100908.jar
    -rw-r--r-- 1 root root 69142 2010-09-08 12:40/usr/lib/jvm/java-6-openjdk/jre/lib/poi-contrib-3.6-20100908.jar
    -rw-r--r-- 1 root root 181907 2010-09-08 12:40/usr/lib/jvm/java-6-openjdk/jre/lib/poi-examples-3.6-20100908.jar
    -rw-r--r-- 1 root root 412788 2010-09-08 12:40/usr/lib/jvm/java-6-openjdk/jre/lib/poi-ooxml-3.6-20100908.jar
    -rw-r--r-- 1 root root 3774336 2010-09-08 12:40/usr/lib/jvm/java-6-openjdk/jre/lib/poi-ooxml-schemas-3.6-20100908.jar< br/> -rw-r--r-- 1 root root 795893 2010-09-08 12:40/usr/lib/jvm/java-6-openjdk/jre/lib/poi-scratchpad-3.6-20100908.jar

  • 我的类路径设置为此目录。

    $ echo $CLASSPATH
    /usr/lib/jvm/java-6-openjdk/jre/lib/

我究竟做错了什么?我也尝试使用预构建的二进制文件,没有任何变化。

谢谢你的帮助!

最佳答案

当您在类路径中指定 jars 时,您不能只指定它们所在的目录,您需要明确列出 jars(Jon Skeet 在 jdk6 中提到的更改可能是一个更改,但我不记得了它要么)。

我不会将那些 jar 放在 jdk lib 目录中。在您的 Promomon.java 文件的 src 目录旁边创建一个 lib 目录,将您的 jar 添加到该目录,并在编译和运行时在类路径中单独列出这些 jar。当我说类路径时,我并不是指环境变量。以下是一些备选方案:

  • 创建几个包含编译和运行命令的可执行文件,并将 jar 文件添加到 -cp 开关的内容列表中。
  • 获取 ant 并制作一个 build.xml 文件。
  • 使用像 eclipse 这样的 IDE 并指定 jar(在 Eclipse 菜单中选择 File->BuildPath->Configure Build Path 并选择“Libraries”选项卡)。

从“Hello World”到使用第三方库的程序是 Java 迈出的一大步。编译和运行某些东西的简单方法很快就停止工作了。

顺便说一句,我查了一下here JDK6 的变化是你可以在类路径中使用通配符,而不是像

-cp=/usr/myapp/classes:/usr/myapp/lib/foo.jar:/usr/myapp/lib/bar.jar

你可以说

-cp=/usr/myapp/classes:/usr/myapp/lib/*.jar

关于java - 导入 jar 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3671600/

相关文章:

java - 如何将上传的文件保存到映射的文件夹中

.net - 从 MSBuild 项目中获取输出文件

hadoop - 运行 Hadoop 示例时出现错误 : package org. apache.hadoop.conf 不存在

java - 客户端 (X509) 认证的默认环境应该是什么

静态方法的 Java 内存模型

visual-studio - 有人可以解释 VS 2008 中不同构建操作的目的吗?

java - 如何从Java中的其他文件夹导入文件?

java - 在类路径中包含 Qclass

java - 在 Tomcat 9 上运行的多线程服务器

c# - 发布构建复制配置文件到另一个项目