JEP 330: Launch Single-File Source-Code Programs

JEP 330: Launch Single-File Source-Code Programs

JDK 11 나와서 포함된 내용들을 테스트 해보고 있습니다. 그중 첫번째로 JEP 330에 대한 내용 입니다.

java런처가 “shebang”파일 및 관련 기술 을 사용하여 스크립트 내에서의 사용을 포함하여 Java 소스 코드의 단일 파일로 제공되는 프로그램을 실행하도록 향상시킵니다 .

여기서 셔뱅(?)이란

인터프리터 (Interpreter) 지시문을 사용하면 스크립트 및 데이터 파일을 명령으로 사용할 수 있으므로 명령 줄에서 스크립트에 인터프리터를 접두어로 사용하지 않아도되므로 사용자 및 기타 프로그램에서 구현 세부 정보가 숨겨집니다.

1
2
3
4
5
6
7
8

#!/bin/sh- path / bin / sh를 사용하여 Bourne 쉘 또는 호환 쉘을 사용하여 파일을 실행하십시오
#!/bin/bash- Bash 쉘을 사용하여 파일을 실행하십시오 .
#!/bin/csh -f- csh, C 쉘 또는 호환 쉘을 사용하여 파일을 실행하고 시작시 사용자의 .cshrc 파일 의 실행을 억제하십시오
#!/usr/bin/perl -T- 오염 검사를 위한 옵션과 함께 Perl 을 사용하여 실행
#!/usr/bin/env python- env 를 통해 파이썬 인터프리터의 경로를 자동으로 찾아 파이썬 을 사용하여 실행
#!/bin/false- 아무것도하지 않고 실패를 나타내는 0이 아닌 종료 상태를 반환합니다 . .sh / bash 의 명령, sourcecsh / tcsh 의 명령 또는 .profile, .cshrc 또는 .login 파일 과 같은 특정 컨텍스트에서의 실행을위한 스크립트 파일의 독립 실행 형 실행을 방지하는 데 사용 됩니다.

Non-Goals

shebang 파일을 수용하기 위해 JLS (Java Language Specification) 또는 javac를 변경하는 것은 목표가 아닙니다. 마찬가지로 Java 언어를 범용 스크립팅 언어로 발전시키는 것이 목표는 아닙니다.

이 JEP의 목표는 Java 언어 스펙을 변경하여 표준 public static void main(String[] args)메소드 의 필요성 제거와 같이 간단한 프로그램 작성 방법을 수용 할 수있게하는 것입니다. 그러나 Java 언어에 대한 이러한 변경 사항은이 기능과 함께 사용할 수 있습니다.

음 그럼 이걸 테스트 해보기 위해서 아래의 헬로월드 코드를 작성했습니다.

1
2
3
4
5
6
7
8
9
10

public class Main {

public static void main(String[] args) {
var test = "asdasd";
System.out.println("Hello World! "+test);
}
}


그 다음 명령어 창에 아래의 명령어로 실행을 시켜 보았습니다.

1
2
3
java Main.java

Hello World! asdasd

위 처럼 명령어를 지정하면 비공식 적으로 아래의 명령어처럼 동작 합니다.

1
2
3
4

javac -d <memory> Main.java
java -cp <memory> Main

그렇게 되어서 class 파일을 남기지 않고 바로 실행하게 됩니다.

참조