2010-09-08 62 views
1

我正在尝试做一些非常简单的事情。我现在要做的就是构建一个包含相应类的文件。导入罐不工作

我有一个名为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。我使用的突触(易于得到安装的OpenJDK-6-JDK)
  • 安装在/ usr/lib目录/ JVM/JAVA-6的OpenJDK/JRE/
  • JAVA_HOME的Java设置安装Java来“的/ usr/LIB/JVM/JAVA-6的OpenJDK/JRE /”

    $回声$ JAVA_HOME
    /usr/lib目录/ JVM/JAVA-6的OpenJDK/JRE/

  • 我内置POI罐子自己使用Ant ,那里没有问题。

  • 我把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:4 0 /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

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

    $回声$ CLASSPATH
    /usr/lib目录/ JVM/JAVA-6的OpenJDK/JRE/lib目录/

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

感谢您的帮助!

+0

什么样的你用的是IDE吗?它不适合你吗?什么发生,你的构建失败?你有错误吗? – 2010-09-08 20:28:19

+0

我只是好奇,为什么你不使用-cp参数运行它? “java -cp poi.jar:yourJar.jar YourClass” – 2010-09-08 20:29:00

+0

我目前没有使用IDE。我真的只想鞭打一些东西......至少看看POI是否可以做我需要的东西。 – 2010-09-09 14:16:22

回答

2

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

我不会把那些罐子放在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来说是一大步。获得编译和运行的简单方法停止快速运行。

BTW我看着它here和JDK6的变化是,你可以在类路径中使用通配符,所以不是上市的罐子单独像

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

你可以说

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

谢谢!这固定了它。不过,我无法将通配符包含在一组jar中。我必须单独包含每条路径。尽管如此,它现在编译,再次感谢。 – 2010-09-09 14:38:47

+0

@Brad,我还没有尝试过使用通配符,也没有使用过openjdk。或者我误解了文档中的某些内容,或者也许openjdk不符合这个标准。很高兴它对你有效。 – 2010-09-09 14:54:09

+0

看来,我必须包括完整的路径来编译,但我可以在运行时使用通配符。 – 2010-09-09 19:01:12

1

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

编辑:我有一个偷偷摸摸的猜疑,改变了Java 6的这个更容易,但我不记得是什么。上面应该把你排序,直到有人指出我忘记的东西:)