javac 选项,用于以递归方式编译给定目录下的所有 java 文件

2022-08-31 07:26:22

我正在使用javac编译器在我的项目中编译java文件。这些文件分布在几个包上,如下所示:、 、 、 、 。com.vistas.utilcom.vistas.convertercom.vistas.LineHelpercom.current.mdcontect

这些包中的每一个都有几个java文件。我像这样使用javac:

javac com/vistas/util/*.java com/vistas/converter/*.java
      com.vistas.LineHelper/*.java com/current/mdcontect/*.java

(在一行中)

与其给出这么多路径,我怎么能要求编译器以递归方式编译父 com 目录中的所有 java 文件呢?


答案 1

我还建议使用某种构建工具(AntMaven,已经建议使用Ant并且更容易开始)或处理编译的IDE(Eclipse使用增量编译和协调策略,您甚至不必关心按任何“编译”按钮)。

使用 Javac

如果你需要为一个更大的项目尝试一些东西,并且附近没有任何合适的构建工具,你总是可以使用一个小技巧:编译的类名可以在文件中指定。您只需将文件名与前缀传递到即可。javacjavac@

如果您可以创建项目中所有文件的列表,则非常简单:*.java

# Linux / MacOS
$ find -name "*.java" > sources.txt
$ javac @sources.txt

:: Windows
> dir /s /B *.java > sources.txt
> javac @sources.txt
  • 优点是是快速简便的解决方案。
  • 缺点是每次创建新源或重命名现有文件时都必须重新生成文件,这是一个容易忘记(因此容易出错)且令人厌烦的任务。sources.txt

使用构建工具

从长远来看,最好使用旨在构建软件的工具。

使用蚂蚁

如果您创建一个描述如何构建软件的简单文件:build.xml

<project default="compile">
    <target name="compile">
        <mkdir dir="bin"/>
        <javac srcdir="src" destdir="bin"/>
    </target>
</project>

您可以通过运行以下命令来编译整个软件:

$ ant
  • 优点是您使用的是易于扩展的标准构建工具。
  • 缺点是您必须下载,设置和学习其他工具。请注意,大多数 IDE(如 NetBeans 和 Eclipse)都为编写构建文件提供了很好的支持,因此在这种情况下您不必下载任何内容。

使用 Maven

Maven的设置和工作并不是那么微不足道,但学习它是值得的。这是一个很棒的教程,可以在5分钟内启动一个项目

  • 它的主要优点(对我来说)是它也处理依赖项,所以你不需要下载更多的Jar文件并手动管理它们,我发现它对于构建,打包和测试更大的项目更有用。
  • 缺点是它有一个陡峭的学习曲线,如果Maven插件喜欢抑制错误:-)另一件事是,相当多的工具也与Maven存储库一起使用(如Scala的Sbt,Ant的IvyGroovy的Graddle)。

使用 IDE

现在,什么可以提高您的开发效率。有一些开源替代品(如EclipseNetBeans,我更喜欢前者),甚至商业替代品(如IntelliJ)都非常流行和强大。

他们可以在后台管理项目构建,因此您不必处理所有命令行内容。但是,如果您知道后台实际发生了什么,它总是很方便,因此您可以搜索偶尔的错误,例如.ClassNotFoundException

一个额外的注意事项

对于较大的项目,始终建议使用 IDE 生成工具。前者提高了您的工作效率,而后者则可以在项目中使用不同的IDE(例如,Maven可以通过简单的命令生成Eclipse项目描述符)。此外,拥有一个可以使用单行命令测试/构建的项目很容易引入新同事,例如引入到持续集成服务器中。蛋糕:-)mvn eclipse:eclipse


答案 2
find . -name "*.java" -print | xargs javac 

有点残酷,但工作得像地狱。(仅用于小程序,绝对效率低下)


推荐