在命令行界面中编写看似自引用的"-d."的目的是什么

bey*_*ets 3 java command-line-interface

在命令行界面中编译应用程序时,我有时会看到如下编写的命令:

javac -d . HelloWorld.java
Run Code Online (Sandbox Code Playgroud)

我明白那个:

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

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

它似乎是自我指责的,完全是多余的/不必要的.我希望只是以下内容,据我所知,它具有相同的效果并且不那么冗长:

javac HelloWorld.java
Run Code Online (Sandbox Code Playgroud)

有什么东西我错过了吗?

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

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

Mic*_*aud 5

当源目录不是当前的DIR时

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

当你在/tmp,编译时

javac -d . src/Hello.java
Run Code Online (Sandbox Code Playgroud)

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

如果没有该选项,它将转到与源文件相同的目录,即/tmp/src/Hello.class.

此外还有当差的包都参与其中.编译此代码

package Foo;

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

/tmp/src带有该-d .选项的目录中构建包的子目录

/tmp/src
??? Foo
?   ??? Hello.class
??? Hello.java
Run Code Online (Sandbox Code Playgroud)

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

$ tree
.
??? Hello.java

0 directories, 1 file
$ javac Hello.java 
$ tree
.
??? Hello.class
??? Hello.java

0 directories, 2 files
Run Code Online (Sandbox Code Playgroud)

使用javac 1.8.0_101测试期间没有动物受伤.