gpt4 book ai didi

java - 为什么 `javac -cp` 不需要 `.` 而 `java -cp` 需要?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:21 31 4
gpt4 key购买 nike

我有两个问题:

为什么 javac -cp 不需要 .

$ javac -cp /home/t/programs/java/test/junit-4.11.jar TestCase.java

为什么java -cp需要.

$ java -cp /home/t/programs/java/test/junit-4.11.jar:/home/t/programs/java/test/hamcrest-core-1.3.jar org.junit.runner.JUnitCore TestCase
JUnit version 4.11
Could not find class: TestCase

Time: 0.002

OK (0 tests)

$ java -cp .:/home/t/programs/java/test/junit-4.11.jar:/home/t/programs/java/test/hamcrest-core-1.3.jar org.junit.runner.JUnitCore TestCase
JUnit version 4.11
.running TestCase test1
.running TestCase test2

Time: 0.023

OK (2 tests)

测试用例.java:

import static org.junit.Assert.*;
import org.junit.Test;

// define a test case class, whose instances represent test cases
public class TestCase {

@Test
public void test1() {
System.out.println("running TestCase test1");
assertTrue(true);
}

@Test
public void test2() {
System.out.println("running TestCase test2");
assertTrue(true);
}

}

最佳答案

因为 javac 处理文件,java 处理完全限定的类名。

编辑

扩展一点,当你编译时,你将要编译的文件直接传递给 javac,所以类路径只意味着包含你需要编译的包您作为参数传递的文件。也就是说,您正在编译的文件不需要位于类路径中。

另一方面,当您使用 java 执行时,您是在告诉 JVM“从类路径运行此类”。当然,默认类路径是 .。但随后您决定使用 -cp 指定自定义类路径,这不会添加到类路径中,但会覆盖它。所以你必须明确地把它加回去。

参见 the last section of the official tutorial进行确认。

关于java - 为什么 `javac -cp` 不需要 `.` 而 `java -cp` 需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55632835/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com