【问题标题】:How to make javac find JAR files? (Eclipse can see them)如何让 javac 找到 JAR 文件? (Eclipse 可以看到它们)
【发布时间】:2011-11-03 04:36:19
【问题描述】:

当我在 Eclipse 中时,我的项目编译时没有错误,但是当我尝试使用 javac 编译时,它说我缺少一些包...

我复制了我的编译命令和下面的一些错误文本:

javac -classpath lib/ -d bin/ src/*.java
src/Cleaner.java:5: package net.sourceforge.jgeocoder does not exist
src/MyUtilities.java:19: package org.apache.commons.codec.binary does not exist

在 Eclipse 中,我已将所有 .JAR 文件添加到构建路径中,程序编译得很好。

为什么我使用 javac 代替 Eclipse IDE 时找不到 jar?

【问题讨论】:

  • 因为 Eclipse 被告知在哪里查看,但 javac 没有:-) 这里没有魔法。

标签: java eclipse classpath


【解决方案1】:

现有的答案,尽管信息量很大,但仍然让我感到疑惑,不得不查看 javac -classpath 文档。以下是您可能想知道的修订版:

javac -cp "lib/" Example.java 将加载lib/ 中的所有.class 文件。
javac -cp "lib/\*" Example.java 将加载lib/ 中的所有.jar 文件,但不加载.class 文件。
javac -cp "lib/;lib/\*" Example.java将加载lib/ 中的所有.jar.class 文件。

注意事项:

  • 上述示例中使用的*(通配符)字符被转义(注意\* 之前)。 \ 用于 bash,如果您使用其他东西,它可能会有所不同。您想转义它,因为 java sdk 实用程序,如 javac,它们自己解释通配符的方式。据我所知(如果我错了,请纠正我),Windows 命令行不会扩展 * 所以你不需要转义它:-cp lib\* 应该没问题。
  • ; 分隔路径,如 javac -cp ".;a/;b/;c/" Example.java - 这将在以下目录中加载 .class 文件:当前目录、a、b 和 c。
  • 使用分隔符 (;) 时,用引号将类路径括起来(如示例中)。

【讨论】:

    【解决方案2】:

    -classpath lib/ 将导致javaclib 中查找类文件树。如果那里有 JAR 存档,则必须使用 -classpath lib/*.jar - 并且可能使用 CLI 在 * 上的任何转义机制以确保它到达 javac 而不是被 CLI 扩展

    请参阅javac command reference (windows)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-12
      • 2016-07-27
      • 2023-01-31
      • 1970-01-01
      • 2021-02-21
      • 2010-09-17
      • 2013-08-17
      相关资源
      最近更新 更多