导入Jars无法正常工作

时间:2010-09-08 20:24:21

标签: 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(apt-get install openjdk-6-jdk)
  • 安装了java
  • 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放入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 <登记/> -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 /

我到底在做什么?我也试过使用预先构建的二进制文件,没有变化。

谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

当您在类路径中指定jar时,您不能只指定它们所在的目录,您需要明确列出jar(jdk6中Jon Skeet引用的更改可能会更改此但我不记得了它要么)。

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

  • 创建一些包含compile和run命令的可执行文件,并将jar文件添加到-cp开关中的stuff列表中。
  • 获取ant并生成build.xml文件。
  • 使用像eclipse这样的IDE并指定jar(在Eclipse菜单中选择File-&gt; BuildPath-&gt; Configure Build Path并选择“Libraries”选项卡)。

从“Hello World”转到使用第三方库的程序是Java的重要一步。获取编译和运行的简单方法会停止工作。

BTW我查了here,JDK6的变化是你可以在类路径中使用通配符,所以不要单独列出jar,如

-cp=/usr/myapp/classes:/usr/myapp/lib/foo.jar:/usr/myapp/lib/bar.jar
你可以说

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

答案 1 :(得分:1)

将jar文件直接放在lib目录中不会有帮助。您可以将它们放在jre / lib / ext,中,您可以指定另一个可以指定的ext目录(javac -extdirs=...java -Djava.ext.dirs=...), jar文件明确。

编辑:我有一种潜在的怀疑,使用Java 6可以让这更容易,但是我记不起来了。以上应该排除你直到有人指出我忘记了什么:)