在命令行界面编译应用程序时,有时会看到这样写的命令:
javac -d . HelloWorld.java
我的理解是:
-
-d <directory>
= 指定放置生成的类文件的位置 -
.
= 当前文件夹
我的问题是:写-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/