bey*_*ets 3 java command-line-interface
在命令行界面中编译应用程序时,我有时会看到如下编写的命令:
javac -d . HelloWorld.java
Run Code Online (Sandbox Code Playgroud)
我明白那个:
-d <directory> =指定生成的类文件的放置位置. =当前文件夹我的问题是:写作的目的是什么-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
当源目录不是当前的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测试期间没有动物受伤.