【问题标题】:Compile java from multiple directories [duplicate]从多个目录编译java [重复]
【发布时间】:2014-07-20 04:41:04
【问题描述】:

我正在尝试从 Windows、Mac 或 Linux 上的不同目录编译多个 .java 程序...例如cmd或终端。没关系。

但是,我相信你们中的许多人都熟悉 Netbeans 如何将文件存储在不同的文件夹中。我一直将不同的概念放入不同的文件夹,现在我想运行所有这些。

例如,我的一个国际象棋程序看起来像这样:

/Chess
    /build
        /classes
            /chess
                /Chess.class
            /color
                /colorHelper.class
            /game
                /Board.class
                /Game.class
                /GameManager.class
                /Player.class
            ... etc. (the rest of the directories with .class files)
    /build.xml
    /gameLog.txt
    /manifest.mf
    /nbproject
        ... (some xml and .properties files)
    /src
        /chess
            /Chess.java
        /color
            /ColorHelper.java
        /game
            /Board.java
            /Game.java
            /GameManager.java
            /Player.java
        ... etc. (the rest of the directories with .java files)

所以,我的问题是,你如何使用javac *.java(可能在/src)来编译所有文件(因为否则我会得到一个cannot find symbol 错误。因为我在运行时得到一个file not found javac *.javasrc,我很茫然。

提前致谢,

迪伦

【问题讨论】:

  • 您会考虑使用 ANT 或 Maven 之类的程序或其他工具在命令行上编译您的类吗?
  • @JorgeCampos 是对的,但如果你坚持不这样做,javac $(find . -name '*.java')
  • 我从来没有使用过这些,因为我从来没有必要...我可以对它们进行一些研究。他们会允许我做我想做的事吗? (当然,我真的可以从 Netbeans IDE 运行程序......甚至将所有内容放入 .jar,然后使用 .bat 文件运行......但我想从 cmd 或终端学习)。
  • 当您要求在 Windows, Mac, or Linux 不同的平台上执行此操作时,您必须为每个平台制作一些 bash/bat 脚本或使用我提到的工具之一,它可以在任何平台上工作如果它们安装正确。
  • 现在它在 Mac 终端中......将来它将在 windows cmd.exe 以及 Ubuntu 终端上。 :)

标签: java javac


【解决方案1】:

它不会一次性编译。实际上,您的src目录不包含任何.java文件,所以不会这样!

恐怕您必须通过更改src 文件夹下的路径来执行此操作。

您必须为每个chesscolorgame 等执行。目录来实现相同的目标。

因此,每次运行时更改路径或按照 cmets 中的建议进行,以实现所有 java 文件的编译。

正如 David Ehrmann 在您的评论中所建议的那样,您可以使用 javac $(find . -name '*.java') 一次性编译。

它将编译您当前目录下的所有 .java 文件(src(.))。

【讨论】:

  • 好的!这听起来很合理。 -name 只是当前目录的名称(本例为“src”)的名称吗?
  • @dyl-指定要搜索的文件名!
  • 那么. 是做什么的?那不是指定要搜索的文件吗?
  • 这只是基本目录还是什么?
  • @dyl- . 是表示当前目录的方式/语法。它表示您的src 目录!
【解决方案2】:

javac *.java 编译当前目录中的所有 Java 文件。在您的情况下,由于您具有基于包的不同文件夹层次结构,因此您无法一次性实现这一目标。充其量您可以在每个文件夹上运行命令 javac *.java。

【讨论】:

  • 你不是必须在一行中编译所有内容吗?还是不正确?
【解决方案3】:

您应该尝试使用自动构建系统,例如 maven 或 ant。它将允许您使用单个命令构建您的项目。它甚至允许运行单元测试,并将您的应用程序打包为 jar(或您喜欢的任何包)。

如果您真的不想使用其中之一,您仍然可以使用单个(尽管很长)命令来完成。 *.java 只是文件路径中的通配符。它在当前目录中查找以 .java 结尾的所有文件。在 linux 上,您可以尝试类似 find -name "*.java" | xargs javac 的操作。第一部分是一个查找命令,它递归地搜索所有以 .java 结尾的文件。这个管道是 xargs 的文件列表,它将它们作为单独的参数添加到 java 命令。

这确实不是最好的方法。再次,尝试 Maven。设置一个基本项目非常简单,您的 IDE 通常还具有为您创建 maven 项目的功能。

【讨论】:

    【解决方案4】:

    要在同一文件夹中编译多个具有不同包名的文件,请使用

    爪哇 -d 。 *.java

    【讨论】:

    • 那行不通。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2010-09-21
    • 2017-02-07
    • 2011-05-08
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    相关资源
    最近更新 更多