자바9에 대한 조사
9466 단어 Java
개요
거의 자바 10 (18.3이죠?)라고 등장해 9의 추가 기능으로 조사한 일과 시도한 일을 담았다.
조사한 일
JShell
JShell을 가져왔습니다.
명령줄에서 대화 형식으로 코드를 실행할 수 있습니다.
간단한 코드를 실행하고 싶을 때 클래스 파일을 사용하는 번거로움을 줄일 수 있다.
List.of、Set.of、Map.of
컬렉션 클래스에 플랜트 방법이 추가되었습니다.List<String> list = List.of("コーヒー牛乳", "いちご牛乳");
Set<String> set = Set.of("れもん牛乳", "めろん牛乳");
Map<String, String> map = Map.of("コーヒー牛乳", "100円", "いちご牛乳", "120円");
"of"방법으로 생성된 모음집은 정음판으로 변합니다.
모듈 기능
모듈 가져오기 기능을 통해 모듈의 공개 범위와 의존 관계를 명확히 할 수 있다.
라이브러리 등public방법은 사용할 생각이 없는 반에서 참조되었다
이런 일도 방지할 수 있다.
참조: Project Jigsaw
모듈 기능을 사용하지 않는 경우
호출된 측면 (jar)의 폴더 구조 (1)gyunyu/
┗━ src/
┗━ jp/gr/java_conf/masakado/gyunyu/
┣━ Coffee.java
┗━ util/
┗━ Utility.java
Coffee.javapublic class Coffee {
public void print() {
Utility.output("コーヒー");
}
}
java.Utility.javapublic class Utility {
public static void output(String name) {
System.out.println("これは、" + name + "牛乳です。");
}
}
Utility.output(...)
gyunuyu 프로젝트에서만 사용
외부에서 집행할 방법을 구상하지 않았다.
상술한 두 파일을 컴파일하다.jar을 만들다.javac -d bin -encoding UTF-8 src\jp\gr\java_conf\masakado\gyunyu\Coffee.java src\jp\gr\java_conf\masakado\gyunyu\util\Utility.java
jar -cvf gyunyu.jar -C bin .
측면 폴더 구조 호출(1)sample/
┣━ src/
┃ ┗━ jp/gr/java_conf/masakado/sample/
┃ ┗━ Main.java
┗━ lib/
┗━ gyunyu.jar
Main.javaimport jp.gr.java_conf.masakado.gyunyu.Coffee;
import jp.gr.java_conf.masakado.gyunyu.util.Utility;
public class Main {
public static void main(String[] args) {
(new Main()).execute();
}
public void execute() {
Coffee coffee = new Coffee();
coffee.print();
Utility.output("想定していない呼び出し:いちご"); //外部から実行される事を想定していないメソッドを参照
}
}
외부에서 실행되지 않은 gyunyu.jar
의Utility.output(...)
를 참고했다.
이 작업을 컴파일하고 실행할 때javac -d bin -cp lib\gyunyu.jar -encoding UTF-8 src\jp\gr\java_conf\masakado\sample\Main.java
java -cp lib\gyunyu.jar;bin jp.gr.java_conf.masakado.sample.Main
다음과 같이 표시됩니다.
모듈 기능 사용 시
호출자 (jar) 에서 만들기 module-info.java
.
호출된 측면 (jar)의 폴더 구조 (2)gyunyu/
┗━ src/
┣━ jp/gr/java_conf/masakado/gyunyu/
┃ ┣━ Coffee.java
┃ ┗━ util/
┃ ┗━ Utility.java
┗━ module-info.java
module-info.javamodule jp.gr.java_conf.masakado.gyunyu {
exports jp.gr.java_conf.masakado.gyunyu;
}
exports
: 외부에 공개할 패키지를 지정합니다.
모듈 명칭은 포장 명칭과 같지만 포장 명칭과 일치할 필요가 없고 자유롭게 명명할 수 있습니다.
이것을 컴파일해서jar 파일을 만듭니다.javac -d bin -encoding UTF-8 src\module-info.java src\jp\gr\java_conf\masakado\gyunyu\Coffee.java src\jp\gr\java_conf\masakado\gyunyu\util\Utility.java
jar -cvf gyunyu.jar -C bin .
생성된 gyunyu.jar
를 Sample/lib에 놓고 제작module-info.java
합니다.
측면 폴더 구조 호출(1)sample/
┣━ src/
┃ ┣━ jp/gr/java_conf/masakado/sample/
┃ ┃ ┗━ Main.java
┃ ┗━ module-info.java
┗━ lib/
┗━ gyunyu.jar
module-info.javamodule jp.gr.java_conf.masakado.sample {
requires jp.gr.java_conf.masakado.gyunyu;
}
requires
: 의존 모듈을 지정합니다.-p
옵션 지정gyunyu.jar
으로 컴파일합니다.javac -d bin -p lib\gyunyu.jar -encoding UTF-8 src\module-info.java src\jp\gr\java_conf\masakado\sample\Main.java
다음 오류 정보를 출력합니다. 컴파일에 실패했습니다.パッケージjp.gr.java_conf.masakado.gyunyu.utilは表示不可です
(パッケージjp.gr.java_conf.masakado.gyunyu.utilはモジュールjp.gr.java_conf.masakado.gyunyuで宣言されていますが、エクスポートされていません)
Main.java
에 기재된 Utility.output(...)
를 삭제하면 컴파일링이 통과됩니다.
모듈 정보 표시
아래와 같이 -d
지정한 옵션이jar 명령을 실행할 때 모듈 정보를 참조할 수 있습니다.jar -d -f lib\gyunyu.jar
exports jp.gr.java_conf.masakado.gyunyu
requires java.base mandated
contains jp.gr.java_conf.masakado.gyunyu.util
exports
: 공개된 가방requires
: 종속 모듈contains
: exports에 기재되지 않았지만jar에 포함된 봉인
최후
모듈 기능을 가져와 의존 관계를 이해하기 쉬워졌기 때문에 컴파일링이 잘 진행되었는데 실행하니 JAR이 부족하고 오류가 발생하였다
이런 일은 발생할 가능성이 줄어들겠죠.
모듈을 지원하는 JAR을 아직 처리하지 않았기 때문에 모듈 기능의 은혜를 받을 수 있었던 것은 아마도 아주 오래된 일일 것이다.
Reference
이 문제에 관하여(자바9에 대한 조사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Masa_Kado/items/51cac1c3ea1937e00608
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
JShell
JShell을 가져왔습니다.
명령줄에서 대화 형식으로 코드를 실행할 수 있습니다.
간단한 코드를 실행하고 싶을 때 클래스 파일을 사용하는 번거로움을 줄일 수 있다.
List.of、Set.of、Map.of
컬렉션 클래스에 플랜트 방법이 추가되었습니다.
List<String> list = List.of("コーヒー牛乳", "いちご牛乳");
Set<String> set = Set.of("れもん牛乳", "めろん牛乳");
Map<String, String> map = Map.of("コーヒー牛乳", "100円", "いちご牛乳", "120円");
"of"방법으로 생성된 모음집은 정음판으로 변합니다.모듈 기능
모듈 가져오기 기능을 통해 모듈의 공개 범위와 의존 관계를 명확히 할 수 있다.
라이브러리 등public방법은 사용할 생각이 없는 반에서 참조되었다
이런 일도 방지할 수 있다.
참조: Project Jigsaw
모듈 기능을 사용하지 않는 경우
호출된 측면 (jar)의 폴더 구조 (1)
gyunyu/
┗━ src/
┗━ jp/gr/java_conf/masakado/gyunyu/
┣━ Coffee.java
┗━ util/
┗━ Utility.java
Coffee.javapublic class Coffee {
public void print() {
Utility.output("コーヒー");
}
}
java.Utility.javapublic class Utility {
public static void output(String name) {
System.out.println("これは、" + name + "牛乳です。");
}
}
Utility.output(...)
gyunuyu 프로젝트에서만 사용외부에서 집행할 방법을 구상하지 않았다.
상술한 두 파일을 컴파일하다.jar을 만들다.
javac -d bin -encoding UTF-8 src\jp\gr\java_conf\masakado\gyunyu\Coffee.java src\jp\gr\java_conf\masakado\gyunyu\util\Utility.java
jar -cvf gyunyu.jar -C bin .
측면 폴더 구조 호출(1)sample/
┣━ src/
┃ ┗━ jp/gr/java_conf/masakado/sample/
┃ ┗━ Main.java
┗━ lib/
┗━ gyunyu.jar
Main.javaimport jp.gr.java_conf.masakado.gyunyu.Coffee;
import jp.gr.java_conf.masakado.gyunyu.util.Utility;
public class Main {
public static void main(String[] args) {
(new Main()).execute();
}
public void execute() {
Coffee coffee = new Coffee();
coffee.print();
Utility.output("想定していない呼び出し:いちご"); //外部から実行される事を想定していないメソッドを参照
}
}
외부에서 실행되지 않은 gyunyu.jar
의Utility.output(...)
를 참고했다.이 작업을 컴파일하고 실행할 때
javac -d bin -cp lib\gyunyu.jar -encoding UTF-8 src\jp\gr\java_conf\masakado\sample\Main.java
java -cp lib\gyunyu.jar;bin jp.gr.java_conf.masakado.sample.Main
다음과 같이 표시됩니다.모듈 기능 사용 시
호출자 (jar) 에서 만들기
module-info.java
.호출된 측면 (jar)의 폴더 구조 (2)
gyunyu/
┗━ src/
┣━ jp/gr/java_conf/masakado/gyunyu/
┃ ┣━ Coffee.java
┃ ┗━ util/
┃ ┗━ Utility.java
┗━ module-info.java
module-info.javamodule jp.gr.java_conf.masakado.gyunyu {
exports jp.gr.java_conf.masakado.gyunyu;
}
exports
: 외부에 공개할 패키지를 지정합니다.모듈 명칭은 포장 명칭과 같지만 포장 명칭과 일치할 필요가 없고 자유롭게 명명할 수 있습니다.
이것을 컴파일해서jar 파일을 만듭니다.
javac -d bin -encoding UTF-8 src\module-info.java src\jp\gr\java_conf\masakado\gyunyu\Coffee.java src\jp\gr\java_conf\masakado\gyunyu\util\Utility.java
jar -cvf gyunyu.jar -C bin .
생성된 gyunyu.jar
를 Sample/lib에 놓고 제작module-info.java
합니다.측면 폴더 구조 호출(1)
sample/
┣━ src/
┃ ┣━ jp/gr/java_conf/masakado/sample/
┃ ┃ ┗━ Main.java
┃ ┗━ module-info.java
┗━ lib/
┗━ gyunyu.jar
module-info.javamodule jp.gr.java_conf.masakado.sample {
requires jp.gr.java_conf.masakado.gyunyu;
}
requires
: 의존 모듈을 지정합니다.-p
옵션 지정gyunyu.jar
으로 컴파일합니다.javac -d bin -p lib\gyunyu.jar -encoding UTF-8 src\module-info.java src\jp\gr\java_conf\masakado\sample\Main.java
다음 오류 정보를 출력합니다. 컴파일에 실패했습니다.パッケージjp.gr.java_conf.masakado.gyunyu.utilは表示不可です
(パッケージjp.gr.java_conf.masakado.gyunyu.utilはモジュールjp.gr.java_conf.masakado.gyunyuで宣言されていますが、エクスポートされていません)
Main.java
에 기재된 Utility.output(...)
를 삭제하면 컴파일링이 통과됩니다.모듈 정보 표시
아래와 같이
-d
지정한 옵션이jar 명령을 실행할 때 모듈 정보를 참조할 수 있습니다.jar -d -f lib\gyunyu.jar
exports jp.gr.java_conf.masakado.gyunyu
requires java.base mandated
contains jp.gr.java_conf.masakado.gyunyu.util
exports
: 공개된 가방requires
: 종속 모듈contains
: exports에 기재되지 않았지만jar에 포함된 봉인최후
모듈 기능을 가져와 의존 관계를 이해하기 쉬워졌기 때문에 컴파일링이 잘 진행되었는데 실행하니 JAR이 부족하고 오류가 발생하였다
이런 일은 발생할 가능성이 줄어들겠죠.
모듈을 지원하는 JAR을 아직 처리하지 않았기 때문에 모듈 기능의 은혜를 받을 수 있었던 것은 아마도 아주 오래된 일일 것이다.
Reference
이 문제에 관하여(자바9에 대한 조사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Masa_Kado/items/51cac1c3ea1937e00608
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(자바9에 대한 조사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Masa_Kado/items/51cac1c3ea1937e00608텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)