我在项目中使用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文件,而不是给出这么多路径呢?

推荐答案

我还建议使用某种构建工具(AntMaven,已经建议使用Ant,而且更容易开始使用)或处理编译的IDE(Eclipse使用带有协调策略的增量编译,您甚至不必按任何"Compile"个按钮).

使用Javac

如果你需要为一个更大的项目try 一些东西,但附近没有任何合适的构建工具,你可以使用javac提供的一个小技巧:可以在文件中指定要编译的类名.只需将文件名以@前缀传递给javac即可.

如果可以创建项目中所有*.java个文件的列表,那么很容易:

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

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

使用构建工具

从长远来看,最好使用为构建软件而设计的工具.

使用蚂蚁

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

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

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

$ ant
  • The advantage表示您正在使用易于扩展的标准构建工具.
  • The drawback是指你必须下载、设置和学习一个额外的工具.请注意,大多数IDE(如NetBeans和Eclipse)都提供了编写构建文件的强大支持,因此在这种情况下,您无需下载任何内容.

使用Maven

Maven的设置和使用并不是那么微不足道,但学习它会带来很好的回报.这里有一个关于start a project within 5 minutes个人的很棒的教程.

  • It's main advantage(对我来说)是因为它也处理依赖关系,所以你不需要下载更多的Jar文件并手动管理它们,我发现它对于构建、打包和测试更大的项目更有用.
  • The drawback是它有一个陡峭的学习曲线,如果Maven插件喜欢 suppress 错误:-)另一件事是相当多的工具也使用Maven存储库(比如Scala为Sbt,Ant为Ivy,Groovy为Graddle).

使用IDE

现在,什么可以提高你的开发效率.有一些开源的替代方案(比如EclipseNetBeans,我更喜欢前者),甚至还有一些商业的(比如IntelliJ),它们都非常流行和强大.

他们可以在后台管理项目构建,这样您就不必处理所有命令行内容.然而,如果你知道背景中的actually happens是什么,那么它总是很有用的,这样你就可以找出偶尔出现的错误,比如ClassNotFoundException.

还有一个注意事项

对于较大的项目,总是建议使用IDE and作为构建工具.前者提高了您的工作效率,而后者使得在项目中使用不同的IDE成为可能(例如,Maven可以用一个简单的mvn eclipse:eclipse命令生成Eclipse项目描述符).此外,例如,拥有一个可以用单行命令测试/构建的项目很容易介绍给新同事,并引入到持续集成服务器中.小菜一碟:-)

Java相关问答推荐

Android -如何修复Java.time.zone. ZoneRulesExcept:未知时区ID:Europe/Kyiv

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

上下文初始化期间遇到异常-使用Java配置配置HibernateTemplate Bean时

为什么我要创建一个单独的互斥体/锁对象?

滚动视图&不能在alert 对话框中工作(&Q;&Q;)

在Java中,在单个逻辑行中连接列表和单个元素的正确方法是什么?

SpringBoot+Java 17@Valid未验证POJO

如何在ApachePOI中将图像添加到工作表的页眉?

如何使用SpringBoot中的可分页对整数作为字符串存储在数据库中时进行排序

如何在一行中使用Dijkstra中的Java Stream

如果按钮符合某些期望,如何修改它的文本?

为什么有两种实现来检索数组类的组件类型?

将stringBuilder + forloop转换为stream + map

如果第一位数字和最后一位数字相差超过一位,您将如何获得随机数?

AWS Java SDK v2.x中没有setObjectAcl方法

组合连接以从两个表返回数据

我的代码是线程安全的吗?[Java、CAS、转账]

如何用Micrometer&;斯普肯

Maven创建带有特定类的Spring Boot jar和普通jar

using case default on switch语句返回;预览特征切换中的模式匹配仅在源级别20及以上的情况下可用;