【问题标题】:Compiling java programs from CLI using javac使用 javac 从 CLI 编译 java 程序
【发布时间】:2010-09-13 16:09:17
【问题描述】:

我在调用 javac 的地方有以下目录结构形式

src/lib/构建/

在src下:

src/com/xyz/App.java -- 包含主类
src/com/xyz/base/j1.java
src/com/xyz/base/j2.java
src/com/xyz/exceptions/e1.java
src/com/xyz/hibernate/factory/hbf1.java
src/com/xyz/hibernate/helper/hbh1.java


库下:

lib/hibernate.jar

lib/commons.jar



在顶层,我使用以下 javac 命令:

javac -verbose -classpath lib/hibernate.jar:lib/commons.jar -d ./build -sourcepath ./src com/xyz/*.java

我收到以下输出

javac: 不匹配

args应该如何传递给javac?

这是答案:

javac -verbose -d build -classpath lib/commons.jar:lib/hibernate.jar [所有目录的完整路径]/*.java

【问题讨论】:

  • csh 被认为是有害的。
  • javac -d build -classpath lib/commons.jar:lib/hibernate.jar src/*

标签: javac


【解决方案1】:

javac 不会扩展通配符,这就是你的 shell 所做的。因此,当您指定 com/xyz/*.java 时,它不会扩展为任何内容,因为这些文件位于 src/ 下,但 shell 不知道这一点。如果您将每个 java 文件列为 com/xyz/Foo.java com/xyz/Bar.java 等,它应该可以工作。

(请注意,如果您在 Windows 上,则需要 ; 而不是 : 来分隔类路径)

这样的事情可能会奏效:

javac -verbose -classpath build:lib/hibernate.jar:lib/commons.jar -d ./build  ./src/com/xyz/base/*java ./src/com/xyz/exceptions/*.java ./src/com/xyz/hibernate/factory/*.java ./src/com/xyz/*.java

除了作为如何从命令行编译的练习之外,我不会这样做,否则使用像 ant 这样的构建工具

【讨论】:

  • 在从 ant 编译之前,我很想知道构建过程。这就是我努力的原因
  • 失败的原因是什么?如何 ?在哪里 ?可能缺少一些源目录,例如 ./src/com/xyz/*.java
  • 为什么我需要在类路径中包含目录“build”?即 javac -classpath build:lib/hibernate.jar:lib/commons.jar
  • javac -verbose -classpath build:lib/commons.jar:lib/hibernate.jar -d build ./src/com/xyz/base ./src/com/xyz/App.java 。 /src/com/xyz/hibermate/factory/*.java ...
  • 所以编译的类可以在编译依赖它们的东西时被解析。无论如何,具体来说,您遇到的 exact 错误是什么?请发布输出而不是“失败”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2013-01-08
  • 2020-06-28
相关资源
最近更新 更多