java - 在命令行界面写一个看似自指的 "-d . "有什么用

标签 java command-line-interface

在命令行界面编译应用程序时,有时会看到这样写的命令:

javac -d . HelloWorld.java

我的理解是:

  1. -d <directory> = 指定放置生成的类文件的位置
  2. . = 当前文件夹

我的问题是:写-d .的目的是什么? ?

这似乎是 self 参照,完全多余/不必要。我只希望以下内容,据我所知具有相同的效果并且不那么冗长:

javac HelloWorld.java

有什么我想念的吗?

我使用 symbolhound.com 在网上搜索这个特定的短语,但找不到任何解释。

This page在 Oracle Java 网站上,例如:

javac -d . XorInputStream.java
javac -d . XorOutputStream.java
javac -d . XorSocket.java
javac -d . XorServerSocket.java
javac -d . XorServerSocketFactory.java
javac -d . XorClientSocketFactory.java
javac -d . Hello.java
javac -d . HelloClient.java
javac -d . HelloImpl.java

最佳答案

当源目录不是当前目录时

假设你在/tmp/src中有一个Hello.java文件

当你在/tmp时,编译

javac -d . src/Hello.java

将类文件放在当前目录中,所以它是/tmp/Hello.class

如果没有这个选项,它会进入与源文件相同的目录,即/tmp/src/Hello.class

MOREOVER 当涉及 时会有所不同。编译这段代码

package Foo;

public class Hello  {
    public static void main(String[] args) {
    System.out.println("Hello, World");
}

使用 -d . 选项从 /tmp/src 目录为包构建一个子目录

/tmp/src
├── Foo
│   └── Hello.class
└── Hello.java

javac Hello.java 将类文件留在当前目录中

$ tree
.
└── Hello.java

0 directories, 1 file
$ javac Hello.java 
$ tree
.
├── Hello.class
└── Hello.java

0 directories, 2 files

在使用 javac 1.8.0_101 的测试中没有动物受伤。

关于java - 在命令行界面写一个看似自指的 "-d . "有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38811937/

相关文章:

java - Java中声明静态常量会影响编译后的类

java - android中解析xml属性

windows - 如何将多行命令行命令复制/粘贴到命令提示符中?

java - testng:在方法之间共享实例变量时运行parallel=methods

java - 在Java对象中接收JSON数据

java - 我为我的 java 库添加了 CLI 支持,我怎样才能方便地将它公开给我的库用户?

swift - 在 Swift 中终止 macOS 命令行工具的子进程

python - 如何将每个带有一组子命令的 Click 命令拆分为多个文件?

python - 如何在 Python 中使用 getopt/OPTARG?如果给出太多参数(9),如何转换参数?

java - 加载图像时遇到问题