【问题标题】:Bash compiling Java classes and JARsBash 编译 Java 类和 JAR
【发布时间】:2015-02-10 19:03:57
【问题描述】:

我正在尝试编写一个脚本来自动执行我经常执行的一些任务。我的文件的文件夹结构是这样的:

./
sampleScript.sh
src/SampleProgram.java

除此之外,我的 Java 程序还依赖于 ojdbc6.jar 文件,该文件位于 ~/sampleFolder/lib 中。

我尝试在我的脚本中编译和运行 Java 程序,如下所示:

javac -cp "$CLASSPATH:~/sampleFolder/lib/ojdbc6.jar:./src" src/SampleProgram.java
java -cp "$CLASSPATH:~/sampleFolder/lib/ojdbc6.jar:./src" SampleProgram

很遗憾,这不起作用。在我的程序中检查 ojdbc6.jar 依赖项的步骤似乎失败了。根据这个文件夹结构分配我的-cp 的正确方法是什么?

【问题讨论】:

    标签: java bash unix classpath javac


    【解决方案1】:

    您必须将 ~ 保留在引号之外,以便 shell 可以扩展它:

    javac -cp "$CLASSPATH":~/sampleFolder/lib/ojdbc6.jar:./src src/SampleProgram.java
    java  -cp "$CLASSPATH":~/sampleFolder/lib/ojdbc6.jar:./src SampleProgram
    

    【讨论】:

    • 我已经尝试过你的建议,但我的程序在这一步似乎仍然失败:try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } 带有消息java.lang.ClassNotFoundException oracle.jdbc.driver.OracleDriver
    • 这应该可以。您现在在javac 中没有收到任何错误吗?您也可以尝试提供 jar 文件的完整路径,例如:java -cp "$CLASSPATH":/home/user/sampleFolder/lib/ojdbc6.jar:./src SampleProgram
    • 我建议 $HOME 优于 ~ 有很多原因,其中最重要的是它在引号中扩展。
    • @anubhava @EtanReisner 谢谢,扩展完整路径以及使用$HOME 工作。根据我的文件夹结构,./src 是否仍然需要 javacjava
    • 似乎我可以将它从javac 中取出,因为它不需要编译,但我必须将它留给java,因为SampleProgram.class 文件位于./src 中。再次感谢!
    猜你喜欢
    • 2020-01-14
    • 2010-10-31
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2020-08-22
    相关资源
    最近更新 更多