【问题标题】:Unable to add multiple jars when specifying classpath *.jar in linux [duplicate]在linux中指定类路径* .jar时无法添加多个jar [重复]
【发布时间】:2013-10-06 09:36:53
【问题描述】:

当我编译我的项目时,我在指定多个.jar 文件时遇到了一些问题。我几乎可以肯定:

sudo javac -classpath .:../lib/*.jar server/*.java models/*.java authentication/*.java database/*.java

会起作用的。就像 .java 文件一样。但事实并非如此。

我刚刚意识到我必须将每个 .jar 指定如下:

sudo javac -classpath .:../lib/gson-2.2.4.jar:../lib/mysql-connector-java-5.1.26-bin.jar server/*.java models/*.java authentication/*.java database/*.java

那么,每次我需要一个新的 .jar 时,我真的必须在我的 run.sh shell 代码中添加一个新的 .jar 吗?

总结问题:

-classpath .:../lib/gson-2.2.4.jar:../lib/mysql-connector-java-5.1.26-bin.jar

有效。

-classpath .:../lib/*.jar

没有,为什么?

【问题讨论】:

    标签: java linux jar classpath


    【解决方案1】:

    你不需要指定 *jar 你只需要这样的东西:

    -classpath .:../lib/*  
    

    添加所有罐子。 (没有 .jar 后缀) 请阅读

    http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/classpath.html

    “理解类路径通配符”

    例如,类路径条目 foo/* 指定名为 foo 的目录中的所有 JAR 文件。仅由 * 组成的类路径条目将扩展为当前目录中所有 jar 文件的列表。无论文件是否隐藏(即名称以“.”开头),都将被考虑。

    【讨论】:

      【解决方案2】:

      你需要引用*,这样shell就不会扩展它。

      #this doesn't work:
      javac -classpath .:../lib/*.jar ...
      
      #the above expands to (notice the space between the jar files):
      javac -classpath .:../lib/jar1.jar ../lib/jar2.jar ...
      
      #this should work:
      javac -classpath '.:../lib/*' ...
      

      您希望 javac 解释“*”,而不是 shell。

      【讨论】:

      • 我有一个命令java -classpath /jars/*:/anotherJarsDir/* com.test.MyClass 没有任何引号,它工作正常。我想知道为什么 shell 不扩展它并出错?
      猜你喜欢
      • 2014-09-28
      • 1970-01-01
      • 2014-04-04
      • 2015-05-19
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多