指定JDK运行单个Java测试代码

1.场景:
想服务端获取IP地址的Java代码,本地macOS可以运行,服务器上没有全局安装Java,所以不能Javac x.java && java X执行。
又不能全局安装某个版本,这样可能会影响其他应用的运行。
2.操作:
解压下载的Java某个版本在某个路径下,如:/a/b/java-xx/
然后将待测试的x.java放在/a/b/目录下。
2.1 执行:

  1. JDK(1.0-10)
    /a/b/java-xx/javac /a/b/x.java
    /a/b/java-xx/java /a/b/x
    // 输出结果
  2. JDK(11++)
    /a/b/java-xx/java /a/b/x.java
    // 输出结果

Java编译知识

Java 从 Java 11 开始支持直接使用 java *.java 命令运行单个源代码文件,而无需先使用 javac 编译。这一特性被称为 Java 源代码直接执行功能(Shebang 支持),简化了开发流程。

特性说明

  1. 无需显式编译
    直接使用 java HelloWorld.java 即可运行代码,Java 会自动编译并执行,无需手动调用 javac

  2. 单文件限制
    该功能仅支持单个源代码文件,且文件中只能有一个 public 类,并且类名必须与文件名匹配。

  3. 依赖处理
    如果代码依赖其他类,需要通过 -cp 参数指定类路径,例如:

    java -cp lib/* MyMainClass.java
    

历史版本对比

Java 版本执行方式示例
Java 1.0-10必须先编译再运行javac HelloWorld.java
java HelloWorld
Java 11+支持直接执行源代码文件java HelloWorld.java

示例

假设我们有一个简单的 HelloWorld.java 文件:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, Java 11+!");
    }
}

在 Java 11+ 中,可以直接运行:

java HelloWorld.java  # 无需先编译

注意事项

  1. 版本要求
    必须使用 Java 11 或更高版本。可以通过以下命令检查版本:

    java --version
    
  2. 模块化代码限制
    如果代码使用了 Java 模块系统(module-info.java),则无法直接执行,仍需编译。

  3. 性能影响
    直接执行源代码会在每次运行时隐式编译,可能比预编译的.class文件稍慢。

如果你的 CentOS 系统使用的是 Java 11 或更高版本,可以尝试直接执行 .java 文件。但如果遇到依赖复杂的场景,建议还是使用传统的编译-运行流程。

### 如何运行Java测试用例 #### 使用命令行工具运行JUnit测试 对于简单的项目,可以直接通过命令行编译并运行JUnit测试。首先确保已经安装了JDK环境,并配置好了`CLASSPATH`变量。 假设有一个名为`MyTestClass.java`的测试类文件位于当前目录下,则可以通过如下方式运行: ```bash javac -cp .:junit-platform-console-standalone-<version>.jar MyTestClass.java java -<version>.jar --class-path=. --scan-classpath ``` 这里需要注意的是,路径分隔符在Windows上应改为`;`而不是`:`, 并且需要替换`<version>`为实际下载版本号[^1]。 #### 利用集成开发环境(IDE) 现代IDE如IntelliJ IDEA提供了便捷的方式来管理和执行测试案例。创建一个新的Maven或Gradle工程后,添加依赖项以引入JUnit库支持。接着按照标准结构放置源码与对应的测试代码于相应包内即可轻松点击按钮触发单个或者全部testsuite的调试/执行过程[^2]。 例如,在IntelliJ IDEA中定义了一个带有顺序控制注解(`@Order`)的测试类OfflineTrainingServiceTest: ```java import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class OfflineTrainingServiceTest { @Order(1) @Test public void addPeople() { // 测试逻辑... } @Order(2) @Test public void getPeople() { // 测试逻辑... } } ``` 只需右键选中该类名旁边的绿色箭头图标就能立即启动指定函数;如果希望一次性跑完所有标记好的单元检验程序则可以选择左侧边栏里的Package视图来进行批量操作[^3]。 另外,为了保证每次测试都在干净的状态下进行,通常会在每个测试前后分别调用@BeforeEach/@AfterEach 或者更广泛的@BeforeAll / @AfterAll 方法来做初始化工作和清理现场的任务处理[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值