一尘不染

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

java

我正在使用javac编译器来编译项目中的Java文件。这些文件分布在几个包像这样:com.vistas.util,com.vistas.converter,com.vistas.LineHelper,com.current.mdcontect

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

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

(一行)

除了提供这么多路径之外,我如何要求编译器递归地编译来自父com目录的所有Java文件?


阅读 571

收藏
2020-03-09

共1个答案

一尘不染

我还建议使用某种构建工具(Ant或Maven,已经建议使用Ant,并且更容易入门)或处理该编译的IDE(Eclipse使用增量编译和协调策略,你甚至不必请务必按任何“编译”按钮)。

Using Javac

如果你需要尝试进行更大的项目,并且附近没有任何合适的构建工具,则可以随时使用一个javac提供的小技巧:可以在文件中指定要编译的类名。你只需要javac使用@前缀将文件名传递给。

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

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

:: Windows
> dir /s /B *.java > sources.txt
> javac @sources.txt

优点是这是一种快速简便的解决方案。
缺点是,sources.txt每次创建新的源或重命名现有的文件时,都必须重新生成文件,这很容易忘记(因此容易出错)并且很繁琐。
使用构建工具
从长远来看,最好使用专门用于构建软件的工具。

Using Ant

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

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

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

$ ant
  • 好处是你正在使用易于扩展的标准构建工具。
  • 缺点是你必须下载,设置和学习其他工具。请注意,大多数IDE(例如NetBeansEclipse)都对编写构建文件提供了强大的支持,因此在这种情况下你无需下载任何内容。
    使用Maven
    Maven的设置和使用并不是那么简单,但是学习它很有意义。这是一个很棒的教程,可以在5分钟内启动一个项目。

(对我而言)主要优点是它也可以处理依赖项,因此你无需再下载任何Jar文件并手动管理它们,我发现它对构建,打包和测试较大的项目更有用。
缺点是它的学习曲线很陡峭,并且如果Maven插件喜欢抑制错误:-)另一件事是,很多工具也可以在Maven存储库中运行(例如Sbt用于Scala,Ivy用于Ant,Gradle用于Groovy) 。

使用IDE

现在,什么可以提高你的开发效率。有一些开源替代方案(例如Eclipse和NetBeans,我更喜欢前者),甚至还有商业化的替代方案(例如IntelliJ),它们非常受欢迎且功能强大。

他们可以在后台管理项目建设,因此你不必处理所有命令行内容。但是,如果你知道后台实际发生的情况,那么总是很方便的,这样你就可以找出诸如的偶然错误ClassNotFoundException

2020-03-09