Java 导入jar不起作用

Java 导入jar不起作用,java,build-process,classpath,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.user

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

我有一个名为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放在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根根目录1539296 2010-09-08 12:40/usr/lib/jvm/java-6-openjdk/jre/lib/poi-3.6-20100908.jar
    -rw-r--r--1根根目录69142 2010-09-08 12:40/usr/lib/jvm/java-6-openjdk/jre/lib/poi-contrib-3.6-20100908.jar
    -rw-r--r--1根根根181907 2010-09-08 12:40/usr/lib/jvm/java-6-openjdk/jre/lib/poi-examples-3.6-20100908.jar
    -rw-r--r--1根根412788 2010-09-08 12:40/usr/lib/jvm/java-6-openjdk/jre/lib/poi-ooxml-3.6-20100908.jar
    -rw-r--r--1根根目录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根根目录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/

我到底做错了什么?我还尝试使用预构建的二进制文件,没有任何更改


谢谢你的帮助

将jar文件直接放在lib目录中没有任何帮助。您可以将它们放在jre/lib/ext中,或者可以指定另一个ext目录(
javac-extdirs=…
java-Djava.ext.dirs=…
),或者可以显式指定jar文件


编辑:我有一种隐秘的怀疑,Java6做了一些改变,使之更容易实现,但我不记得是什么了。上面的内容应该会帮你分类,直到有人指出我忘记了什么:)

当你在类路径中指定JAR时,你不能只指定它们所在的目录,你需要显式地列出JAR(Jon Skeet在jdk6中提到的更改可能是一个更改,但我也不记得了)

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

  • 创建两个包含编译和运行命令的可执行文件,并将jar文件添加到-cp开关中的内容列表中
  • 获取ant并生成build.xml文件
  • 使用类似eclipse的IDE并指定JAR(在eclipse菜单中选择File->BuildPath->Configure Build Path并选择“Libraries”选项卡)
从“Hello World”到使用第三方库的程序是Java的一大步。编译和运行某些东西的简单方法会停止快速工作

顺便说一句,我查了一下,JDK6的变化是您可以在类路径中使用通配符,而不是像下面这样单独列出JAR

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

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

您使用的是哪种IDE?这不是为你准备的吗?发生了什么,你的构建失败了?你们有错误吗?我只是好奇,为什么不使用-cp参数运行它?“java-cppoi.jar:yourJar.jaryourclass”我现在没有使用IDE。我真的只是想做点什么。。。好吧,至少看看POI是否能满足我的需要。我曾尝试使用-cp命令,但正如Nathan在下面暗示的那样,我必须包含完整的jar路径。我只是指定了包含JAR的目录。谢谢!这把它修好了。但是,我无法使用通配符包含JAR集。我必须单独包含每个路径。尽管如此,它现在可以编译了,再次感谢。似乎我必须包含要编译的完整路径,但我可以在运行时使用通配符。