Java 9 ΠΌΠΎΠ΄ΡΠ»ΠΈ: ΠΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ Π² Java 9 / Π₯Π°Π±Ρ
Java 9. Project Jigsaw. ΠΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ
ΠΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠΎΡΡΠ΅Π³ΠΎ ΡΠ΅Π»ΠΈΠ·Π° Java 9 ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ½Π΅ΡΡΡ Project Jigsaw. Π¦Π΅Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° β ΡΠ΄Π΅Π»Π°ΡΡ Java SE ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈ Π·Π°ΡΠΈΡΡΠ½Π½ΠΎΠΉ Π·Π° ΡΡΡΡ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ JDK Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠΎΠ΄ΡΠ»Ρ
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ jar-ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ·Π½Π°ΡΠ°Π» Π΄Π»Ρ JVM Π»ΠΈΡΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΊΠΎΠ΄Π° ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ², jar-ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ»Π°ΡΡ module-info, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ:
Β — ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ;
Β — ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡ
-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΡΠ°Π±ΠΎΡΡ;
Β — ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ (ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ) ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ;
Β — ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅.
Π ΡΡΠ΅ΡΡΠ΅ΠΌ ΠΏΡΠ½ΠΊΡΠ΅ ΠΊΡΠΎΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄ΠΎΡΠ΅Π»Π΅ ΡΠ°ΠΊ Π½Π΅ Ρ
Π²Π°ΡΠ°Π»ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌ, ΡΡΠΎ Π΅ΡΡ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ. ΠΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ public ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎΠΉ:
Β — public class Π² ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅ β Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ, Ρ ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ
;
Β — public class Π² ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠ°ΠΊΠ΅ΡΠ΅ β Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ;
Β — public class Π±Π΅Π· ΡΠΊΡΠΏΠΎΡΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° β Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ module-info.java:
module com.example.samplemodule {
Β Β requires com.example.sampleapp;
Β Β requires public java.httpclient;
Β Β exports com.example.samplemodule.model;
Β Β exports com.example.samplemodule.spi;
Β Β uses com.example.samplemodule.spi.DataProvider;
Β Β provides com.example.sampleapp.spi.SettingsProvider
Β Β Β Β with com.example.samplemodule.ModuleSettingsProvider;
}
ΠΠ°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠ΅Π΅Ρ ΠΈΠΌΡ com.example.samplemodule (ΠΏΡΠΈΠ½ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΏΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ²). ΠΠ½ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ com.example.sampleapp, java.httpclient ΠΈ java.base (ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ). ΠΡΠΈΡΡΠΌ java.httpclient Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ com.example.samplemodule. ΠΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΡ com.example.samplemodule.model ΠΈ com.example.samplemodule.spi, ΡΠ°ΠΊ ΡΡΠΎ Π²ΡΠ΅ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π² ΡΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎ. ΠΠΎΠ΄ΡΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ com.example.samplemodule.spi.DataProvider Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. Π ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ½ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ com.example.sampleapp.spi.SettingsProvider Π² ΠΊΠ»Π°ΡΡΠ΅ com.example.samplemodule.ModuleSettingsProvider.
Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΊ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅.
ΠΡΠΈΠΌΠ΅Ρ 1. ΠΡΡΠΌΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π΄Π²ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
Π£ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ Π΄Π²Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°: TimeApp β Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ΅ Π²ΡΠΎΡΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ β TimeLocalModule.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ TimeApp Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π°ΠΏΡΡΠΌΡΡ. Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, Π° Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΌ ΡΡΡΠΎΠΊΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ½Π°ΡΠ΅ ΠΌΡ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ.
TimeApp
// com/example/timeapp/Main.java
package com.example.timeapp;
Β
import com.example.timelocal.TimeLocal;
Β
public final class Main {
Β
Β Β public static void main(String[] args) {
Β Β Β Β System.out.format(«Current time: %s%n», TimeLocal.now());
Β Β }
}
// module-info.java
module com.example.timeapp {
Β Β requires java.base;
Β Β requires com.example.timelocalmodule;
}
TimeLocalModule
// com/example/timelocal/TimeLocal.java
package com.example.timelocal;
Β
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
Β
public class TimeLocal {
Β
Β Β public static String now() {
Β Β Β Β return DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(LocalDateTime.now());
Β Β }
}
// module-info.java
module com.example.timelocalmodule {
Β Β exports com.example.timelocal;
}
Π Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° TimeLocalModule:
Netbeans ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°, com.example.timelocal ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ:
ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠΌ:
@echo off
Β
set JAVA9_HOME=D:\Program Files\Java\jdk-9
set JAVA9=»%JAVA9_HOME%/bin/java»
set JAVAC9=»%JAVA9_HOME%/bin/javac»
Β
mkdir mods\com.example.timeapp
mkdir mods\com.example.timelocalmodule
Β
echo Compile timelocalmodule
%JAVAC9% -d mods/com.example.timelocalmodule ^
Β Β TimeLocalModule/src/module-info.java TimeLocalModule/src/com/example/timelocal/TimeLocal.java
Β
echo Compile timeapp
%JAVAC9% —module-path mods -d mods/com.example.timeapp ^
Β Β TimeApp/src/module-info.java TimeApp/src/com/example/timeapp/Main.java
Β
echo Run timeapp
%JAVA9% —module-path mods ^
Β Β Β Β -m com.example.timeapp/com.example.timeapp.Main
ΠΠΈΠ±ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π² NetBeans IDE ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ:
Current time: 2016-10-20T18:36:36.6763098
ΠΡΠΈΠΌΠ΅Ρ Π½Π° GitHub
ΠΡΠΈΠΌΠ΅Ρ 2. Π‘Π΅ΡΠ²ΠΈΡΡ ΠΈ ServiceLoader
ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π»ΠΈΡΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ Π½Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π½Π΅ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π° Π½Π°ΠΎΠ±ΠΎΡΠΎΡ β ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π°Π²ΠΈΡΠ΅Π»ΠΈ ΠΎΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΠ½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ Π·Π½Π°ΡΡ ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡ
, ΡΠ°ΡΡΠΈΡΡΡΡΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π», Π° Π²ΠΎΡ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π±ΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ.
Π Π°Π½Π΅Π΅, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π»Π΅ΠΆΠ°Π»ΠΈ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π² META-INF/services/exampleservice, ServiceLoader ΡΠΈΡΠ°Π» ΠΎΡΡΡΠ΄Π° Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ» Π² ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ΅ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈΠ»ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². Π’Π΅ΠΏΠ΅ΡΡ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°ΡΠ°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² module-info Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ:
module additional {
Β provides com.example.spi.Provider // Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
Β Β Β with com.impl.ProviderImpl; // ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ΅ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ
}
Π Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ
module main {
Β uses com.example.spi.Provider;
}
Π ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
ServiceLoader<Provider> sl = ServiceLoader.load(Provider.class);
for (Provider p : sl) {
Β // ..
}
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°, ΡΠ²ΡΠ·Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ com.example.timeapp.spi, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Π Π½ΡΠΌ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡ ΠΊΠΎΡΠΎΡΡΠΉ, Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
TimeApp
// com/example/timeapp/spi/TimeProvider.java
package com.example.timeapp.spi;
Β
public interface TimeProvider {
Β
Β Β String now();
}
// module-info.java
module com.example.timeapp {
Β Β requires java.base;
Β
Β Β exports com.example.timeapp.spi;
}
ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΡΠ±ΡΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΈΠ½Π°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ.
TimeLocalModule
// com/example/timelocal/TimeLocalProvider.java
package com.example.timelocal;
Β
import com.example.timeapp.spi.TimeProvider;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
Β
public class TimeLocalProvider implements TimeProvider {
Β
Β Β @Override
Β Β public String now() {
Β Β Β Β return DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(LocalDateTime.now());
Β Β }
}
// module-info.java
module com.example.timelocalmodule {
Β Β requires com.example.timeapp;
Β
Β Β provides com.example.timeapp.spi.TimeProvider
Β Β Β Β with com.example.timelocal.TimeLocalProvider;
}
ΠΡΡΠ°Π»ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π³Π»Π°Π²Π½ΠΎΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π·Π°Π³ΡΡΠΆΠ°Π» ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅ ΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° TimeProvider. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² β ΠΊΠ»Π°ΡΡ ServiceLoader. ΠΠ΅ΡΠ΅Π΄Π°Π² Π΅ΠΌΡ ΠΊΠ»Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° ΠΈ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π² ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ Π² module-info ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ uses, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅.
TimeApp
// com/example/timeapp/Main.java
package com.example.timeapp;
Β
import com.example.timeapp.spi.TimeProvider;
import java.util.ServiceLoader;
Β
public final class Main {
Β
Β Β public static void main(String[] args) {
Β Β Β Β ServiceLoader<TimeProvider> serviceLoader = ServiceLoader.load(TimeProvider.class);
Β Β Β Β serviceLoader.forEach(t -> {
Β Β Β Β Β Β System.out.format(«Current time: %s%n», t.now());
Β Β Β Β Β Β System.out.println(t.getClass());
Β Β Β Β });
Β Β }
}
ΠΡΠ»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ:
Exception in thread «main» java.util.ServiceConfigurationError: com.example.timeapp.spi.TimeProvider: use not declared in module com.example.timeapp
Β Β at java.util.ServiceLoader.fail(java.base@9-ea/ServiceLoader.java:386)
Β Β at java.util.ServiceLoader.checkModule(java.base@9-ea/ServiceLoader.java:371)
Β Β at java.util.ServiceLoader.<init>(java.base@9-ea/ServiceLoader.java:319)
Β Β at java.util.ServiceLoader.<init>(java.base@9-ea/ServiceLoader.java:351)
Β Β at java.util.ServiceLoader.load(java.base@9-ea/ServiceLoader.java:1021)
Β Β at com.example.timeapp.Main.main(com.example.timeapp/Main.java:9)
ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΡ Π½Π΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΊΠ»Π°ΡΡ Π² module-info. Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ:
// module-info.java
module com.example.timeapp {
Β Β requires java.base;
Β
Β Β exports com.example.timeapp.spi;
Β
Β Β uses com.example.timeapp.spi.TimeProvider;
}
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, Π½ΠΎ ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ ΠΏΠΎΡΠ²ΡΡΡΡ. ΠΡΡ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
Π NetBeans IDE Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Run Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π² Modulepath, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½Π΅ ΠΏΡΠΎΠ΅ΠΊΡ, Π° jar-ΡΠ°ΠΉΠ» (ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ β Clean and Build).
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΡΠ²ΠΎΠ΄:
Current time: 2016-10-20T20:41:39.9614732
class com.example.timelocal.TimeLocalProvider
ΠΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π±ΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°.
TimeNetworkModule
// com/example/timenetwork/TimeNetworkProvider.java
package com.example.timenetwork;
Β
import com.example.timeapp.spi.TimeProvider;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpResponse;
Β
public class TimeNetworkProvider implements TimeProvider {
Β
Β Β @Override
Β Β public String now() {
Β Β Β Β try {
Β Β Β Β Β Β return HttpClient.getDefault()
Β Β Β Β Β Β Β Β Β Β .request(URI.create(«http://www.timeapi.org/utc/now»))
Β Β Β Β Β Β Β Β Β Β .header(«User-Agent», «Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36»)
Β Β Β Β Β Β Β Β Β Β .GET()
Β Β Β Β Β Β Β Β Β Β .response()
Β Β Β Β Β Β Β Β Β Β .body(HttpResponse.asString());
Β Β Β Β } catch (IOException | InterruptedException ex) {
Β Β Β Β Β Β throw new RuntimeException(«Network error»);
Β Β Β Β }
Β Β }
}
// module-info.java
module com.example.timenetworkmodule {
Β Β requires com.example.timeapp;
Β Β requires java.httpclient;
Β
Β Β provides com.example.timeapp.spi.TimeProvider
Β Β Β Β Β Β with com.example.timenetwork.TimeNetworkProvider;
}
Π£ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ java.httpclient Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΎΠ²ΡΠΌ HTTP/2 ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ.
ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π² NetBeans IDE ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
rem compile.cmd
echo Compile timeapp
%JAVAC9% -d mods/com.example.timeapp ^
Β Β TimeApp/src/module-info.java TimeApp/src/com/example/timeapp/Main.java ^
Β Β TimeApp/src/com/example/timeapp/spi/TimeProvider.java
Β
echo Compile timelocalmodule
%JAVAC9% —module-path mods -d mods/com.example.timelocalmodule ^
Β Β TimeLocalModule/src/module-info.java TimeLocalModule/src/com/example/timelocal/TimeLocal.java ^
Β Β TimeLocalModule/src/com/example/timelocal/TimeLocalProvider.java
Β
echo Compile timenetworkmodule
%JAVAC9% —module-path mods -d mods/com.example.timenetworkmodule ^
Β Β TimeNetworkModule/src/module-info.java ^
Β Β TimeNetworkModule/src/com/example/timenetwork/TimeNetworkProvider.java
Β
echo Run timeapp
%JAVA9% —module-path mods ^
Β Β Β Β -m com.example.timeapp/com.example.timeapp.Main
ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ:
Current time: 2016-10-20T20:55:03.3944269
class com.example.timelocal.TimeLocalProvider
Current time: 2016-10-20T17:55:06+00:00
class com.example.timenetwork.TimeNetworkProvider
ΠΡΠΈΠΌΠ΅Ρ Π½Π° GitHub
ΠΡΠΈΠΌΠ΅Ρ 3. ΠΠΎΠ΄ΡΠ»ΠΈ ΠΈ ΡΠ΅ΡΡΡΡΡ
ΠΡΡ
ΠΎΠ΄Ρ ΠΈΠ· ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠ΅ΡΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ½Π°ΡΠΈΡ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΈΡ
ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠΎΠ΄ΡΠ»Π΅, Π° Π½Π° Π΄Π°Π»ΡΠ½Π΅ΠΉΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ Π·Π°ΠΏΡΠ΅ΡΠΎΠ² Π½Π΅Ρ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠΎΡΡΡΡ ΡΠΎΡΠΌΡ, Π³Π΄Π΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°, ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π²ΡΠ΅ΠΌΡ.
Π Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ java.desktop, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ java.awt ΠΈ java.swing.
// module-info.java
module com.example.timeapp {
Β Β requires java.base;
Β Β requires java.desktop;
Β
Β Β exports com.example.timeapp.spi;
Β
Β Β uses com.example.timeapp.spi.TimeProvider;
}
ΠΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΈ TimeProvider, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠΊΠΎΠ½ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ:
// com/example/timeapp/spi/TimeProvider.java
package com.example.timeapp.spi;
Β
import java.awt.Image;
Β
public interface TimeProvider {
Β
Β Β String now();
Β
Β Β Image icon();
}
// com/example/timeapp/Main.java
public final class Main extends JFrame {
Β
Β Β public static void main(String[] args) {
Β Β Β Β final Main frame = new Main();
Β Β Β Β ServiceLoader<TimeProvider> serviceLoader = ServiceLoader.load(TimeProvider.class);
Β Β Β Β serviceLoader.forEach(t -> {
Β Β Β Β Β Β final JButton button = new JButton();
Β Β Β Β Β Β button.setText(t.getClass().getSimpleName());
Β Β Β Β Β Β final Image icon = t.icon();
Β Β Β Β Β Β if (icon != null) {
Β Β Β Β Β Β Β Β button.setIcon(new ImageIcon(icon));
Β Β Β Β Β Β }
Β Β Β Β Β Β button.addActionListener(e -> {
Β Β Β Β Β Β Β Β frame.outputLabel.setText(String.format(«Current time: %s%n», t.now()));
Β Β Β Β Β Β });
Β Β Β Β Β Β frame.modulesPanel.add(button);
Β Β Β Β });
Β Β Β Β frame.pack();
Β Β Β Β frame.setVisible(true);
Β Β }
Β
Β Β private final JPanel modulesPanel;
Β Β private final JLabel outputLabel;
Β
Β Β public Main() {
Β Β Β Β super(«Jigsaw Example»);
Β
Β Β Β Β modulesPanel = new JPanel();
Β Β Β Β modulesPanel.setLayout(new BoxLayout(modulesPanel, BoxLayout.LINE_AXIS));
Β Β Β Β add(modulesPanel, BorderLayout.NORTH);
Β
Β Β Β Β outputLabel = new JLabel(«output»);
Β Β Β Β outputLabel.setHorizontalAlignment(SwingConstants.CENTER);
Β Β Β Β add(outputLabel, BorderLayout.CENTER);
Β
Β Β Β Β setDefaultCloseOperation(EXIT_ON_CLOSE);
Β Β }
}
ΠΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ Image icon() ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΠΎΠ³ΠΎ TimeProvider. ΠΠΎΡ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ Π½ΠΎ. ΠΠΎΠ΄ΡΠ»ΠΈ ΠΏΠΎΠΊΠ° Π΅ΡΡ Π½Π΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ java.desktop, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠ»Π°ΡΡ Image ΠΌΡ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π² module-info. ΠΠ°ΠΊ Π±ΡΡΡ? ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² module-info Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ:
requires public java.desktop;
Π’ΠΎΠ³Π΄Π° module-info Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
// module-info.java
module com.example.timeapp {
Β Β requires java.base;
Β Β requires public java.desktop;
Β
Β Β exports com.example.timeapp.spi;
Β
Β Β uses com.example.timeapp.spi.TimeProvider;
}
ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅:
public class TimeLocalProvider implements TimeProvider {
Β
Β Β private static Image icon;
Β
Β Β @Override
Β Β public String now() {
Β Β Β Β return DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(LocalDateTime.now());
Β Β }
Β
Β Β @Override
Β Β public Image icon() {
Β Β Β Β if (icon == null) {
Β Β Β Β Β Β try (InputStream is = getClass().getResourceAsStream(«/res/icon.png»)) {
Β Β Β Β Β Β Β Β if (is != null)
Β Β Β Β Β Β Β Β Β Β icon = ImageIO.read(is);
Β Β Β Β Β Β } catch (IOException ignore) { }
Β Β Β Β }
Β Β Β Β return icon;
Β Β }
}
Π’Π°ΠΊ ΠΆΠ΅ ΠΈ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ β ΡΠ°Π±ΠΎΡΠ°Π΅Ρ!
ΠΡΠΈΠΌΠ΅Ρ Π½Π° GitHub
ΠΡΠΈΠΌΠ΅Ρ 4. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ
Π₯ΠΎΡΠΎΡΠΎ, Π° ΠΊΠ°ΠΊ Π±ΡΡΡ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΡΠ°Π½Π½ΠΈΡ
Π²Π΅ΡΡΠΈΠΉ Java? ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠΌ module-info Π΄Π° ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΡ Π½Π΅Ρ ΡΡΠΎ-ΡΠΎ Π΄Π΅Π»Π°ΡΡ. ΠΠ°ΠΊ Π±ΡΡΡ? Π£ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π° Π²ΡΠ±ΠΎΡΠ°:
Β Β Β Β 1. ΠΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² modulepath, ΡΠΎΠ³Π΄Π° ΠΎΠ½Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ: Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΡ jar-ΡΠ°ΠΉΠ»Π°, ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΅ ΡΠ²ΠΎΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ, Π° ΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΠΎΡΠΊΡΡΡΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄ΡΡΠ³ΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
Β Β Β Β 2. ΠΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² classpath, ΡΠΎΠ³Π΄Π° ΠΎΠ½Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ: Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊΠ°ΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΌΡ Π΅Π³ΠΎ, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ, Π° ΡΠΈΡΠ°ΡΡ ΠΎΠ½ ΡΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠ±ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π±Π΅Π· module-info, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ TimeProvider (Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π² classpath):
// com/example/timemidnight/MidnightProvider.java
package com.example.timemidnight;
Β
import com.example.timeapp.spi.TimeProvider;
import java.awt.Image;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
Β
public class MidnightProvider implements TimeProvider {
Β
Β Β private static Image icon;
Β
Β Β @Override
Β Β public String now() {
Β Β Β Β return «00:00»;
Β Β }
Β
Β Β @Override
Β Β public Image icon() {
Β Β Β Β if (icon == null) {
Β Β Β Β Β Β try (InputStream is = getClass().getResourceAsStream(«/res/icon.png»)) {
Β Β Β Β Β Β Β Β if (is != null)
Β Β Β Β Β Β Β Β Β Β icon = ImageIO.read(is);
Β Β Β Β Β Β } catch (IOException ignore) { }
Β Β Β Β }
Β Β Β Β return icon;
Β Β }
}
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ, ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ jar Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ°ΠΏΠΊΡ, Π½Π°Π·Π²Π°Π² Π΅Π³ΠΎ midnight.jar, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² modulepath:
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ midnight:
// module-info
module com.example.timeapp {
Β Β requires java.base;
Β Β requires public java.desktop;
Β Β requires midnight;
Β
Β Β exports com.example.timeapp.spi;
Β
Β Β uses com.example.timeapp.spi.TimeProvider;
}
Π ServiceLoader MidnightProvider Π½Π΅ ΠΏΠΎΠΏΠ°Π΄ΡΡ, Π·Π°ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΠΏΡΡΠΌΡΡ. ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄ Π² Main, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ ΠΈΠ· ServiceLoader Ρ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°ΠΌΠΈ, ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌΡΠΌΠΈ ΠΏΡΡΠΌΠΎ Π² ΠΊΠΎΠ΄Π΅:
Stream.concat(
Β Β Β Β StreamSupport.stream(serviceLoader.spliterator(), false),
Β Β Β Β Stream.of(new MidnightProvider())) // we can directly access to class from automatic module
Β Β Β Β .forEach(t -> …
ΠΡΠΈΠΌΠ΅Ρ Π½Π° GitHub
Β ΠΠΎΡ ΠΈ Π²ΡΡ. ΠΠ°Π΄Π΅ΡΡΡ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΠΏΡΠΈΠΎΡΠΊΡΡΡΡ Π·Π°Π²Π΅ΡΡ ΡΠ°ΠΉΠ½Ρ Project Jigsaw. ΠΠ° Π²ΠΎΠΏΡΠΎΡΠ°ΠΌΠΈ Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΡΠΎΠ΅ΠΊΡ Π½Π° GitHub: https://github.com/annimon-tutorials/Java-9-Jigsaw-Example
ΠΠΎΡΠΈΡΠ°ΡΡ:
Project Jigsaw: Quick Start Guide
The State of the Module System
Java Platform Module System: Requirements
First steps with Java 9 and Project Jigsaw — Part 1 (ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄)
First steps with Java 9 and Project Jigsaw — Part 2 (ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄)
ΠΡΠΎΠ΅ΠΊΡ Jigsaw Π² Java 9. ΠΠΎΠ΄ΡΠ»ΡΡΠ½ΠΎΠ΅ Π±ΡΠ΄ΡΡΠ΅Π΅, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ
Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΠΈ Java ΠΌΡ ΡΠ»ΡΡΠΈΠΌ ΠΈΠ· Π³ΠΎΠ΄Π° Π² Π³ΠΎΠ΄. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΆΠ΄ΡΠΌ, ΡΠ»Π΅Π΄ΠΈΠΌ Π·Π° Π°Π½ΠΎΠ½ΡΠ°ΠΌΠΈ. ΠΠ°ΠΌ Π³ΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ Jigsaw ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π³ΠΎΡΠΎΠ², Π½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΠ΅ΡΠ΅Π½ΠΎΡΡΡ ΡΡΠΎΠΊ Π²ΡΡ ΠΎΠ΄Π°. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ? ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π½Π΅ΠΌ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Π² ΠΊΠΎΡΠ½Π΅?Β ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΌΠΎΠ΄ΡΠ»ΡΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° β ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΡ ΡΡΠΊΠ° Π°ΠΉΡΠ±Π΅ΡΠ³Π°? ΠΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Jigsaw,Β ΠΌΡ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ ΠΠ²Π°Π½Π° ΠΡΡΠ»ΠΎΠ²Π°.
ΠΠ²Π°Π½ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ Java ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Π±ΠΎΠ»Π΅Π΅ 10 Π»Π΅Ρ, Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ½ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ Zing Π² Azul Systems. Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠΉ Π΄ΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡ JUG.ru ΠΈ Π΄ΡΡΠ³ΠΈΡ Π΅Π²ΡΠΎΠΏΠ΅ΠΉΡΠΊΠΈΡ Java-ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡ .
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Jigsaw, ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΌΠΈΡ Java?
β ΠΠ²Π°Π½, Π΄ΠΎΠ±ΡΡΠΉ Π΄Π΅Π½Ρ. Π Π°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΊΠ°ΠΊΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Jigsaw ΠΎΠΊΠ°ΠΆΠ΅Ρ Π½Π° ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Java?
β ΠΠΎΠ±ΡΡΠΉ. ΠΠ»Ρ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡ ΠΌΠΎΠ΅Π³ΠΎ Π²Π·Π³Π»ΡΠ΄Π° Π½Π° Java ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΡΠ½ΠΎΡΡΡ ΡΡΠΎΠΈΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΠΌΠΎΠ΅ΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π΄Π²Π°Π΄ΡΠ°ΡΡ Π»Π΅Ρ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π½Π°Π΄ΡΠ°ΡΡ ΠΈΠ· Π½ΠΈΡ β ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½. Π Π°Π±ΠΎΡΠ°Π» Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ HotSpot Runtime Π² Sun. ΠΠΎΡΠΎΠΌ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π±ΡΠ»Π° ΠΊΡΠΏΠ»Π΅Π½Π° Oracle. ΠΠ°Π»Π΅Π΅ Π±ΡΠ»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΡΠΈ Ρ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΎΠΉ Π³ΠΎΠ΄Π° ΡΠ°Π±ΠΎΡΠ°Ρ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Azul Systems, Π³Π΄Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½.
ΠΡΡ ΡΡΠΎ Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°Π» ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ, ΡΡΠΎ ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π·Π³Π»ΡΠ΄ΠΎΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° JVM,Β ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π°Π»ΡΠΊ ΠΎΡ ΠΌΠΈΡΠ° Β«ΠΊΡΠΎΠ²Π°Π²ΠΎΠ³ΠΎ ΡΠ½ΡΠ΅ΡΠΏΡΠ°ΠΉΠ·Π°Β», ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ Π²ΠΎΠΏΡΠΎΡΡ ΠΎ Π²Π»ΠΈΡΠ½ΠΈΠΈ Jigsaw Π½Π° ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ Java, Ρ Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π΅ ΡΠ°ΠΊ Π²Π΅Π»ΠΈΠΊΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ. ΠΠ°ΡΠ½ΡΠΌ Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π΅ Ρ ΠΎΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ. Π‘ΡΠ°ΡΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΎΠ±Π»Π°ΡΡΡΠΌΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΡΠ΅Π»ΠΎΠΌ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π°ΡΠ½ΡΡΡΡ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π² ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ΄ Π΅ΡΠ΅ Π½Π΅ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠ½ Π² ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
ΠΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π°ΡΠ½ΡΡΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° OSGi, ΠΊΠΎΠ³Π΄Π° Π·Π°Ρ ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Jigsaw, ΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π·Π°ΡΡΡΠ΄Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ, Π½ΠΎ ΡΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ°ΡΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ. Π ΡΠ΅Π»ΠΎΠΌ, Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ Jigsaw ΠΏΡΠΎΠΉΠ΄ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡΠ΅Π½ΠΈΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ , Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ.
β Π Java 8 ΠΊΠ»ΡΡΠ΅Π²ΡΠΌΠΈ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΡΠΌΠΈ ΡΡΠ°Π»ΠΈ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Stream API. Π‘ ΠΊΠ°ΠΊΠΈΠΌΠΈ Π·Π½Π°ΡΠΈΠΌΡΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΡ Jigsaw?
β ΠΠΎΠ΄ΡΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Jigsaw Π½Π΅ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎΒ Π²Π»ΠΈΡΠ½ΠΈΡ Π½Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠΎΠ΄Π°. Jigsaw ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΌΡ Π·Π°Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ΄ Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ. Π Java 9 ΠΈ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΡΡΡΡΡ Π½ΠΎΠ²ΡΠ΅Β API, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π±Ρ ΡΠ΅Π²ΠΎΠ»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈΠ»ΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΠ»ΠΈ ΡΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΠΈΡΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ ΡΠ΅Π³ΠΎΠ΄Π½Ρ.
ΠΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ²ΠΎΠ»ΡΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Java 8 ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Optional, Π² Java 9 Π² Optional Π΄ΠΎΠ±Π°Π²ΠΈΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊΠΈΡ , ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅Ρ Π² Stream, ΠΌΠ΅ΡΠΎΠ΄ or, Π½ΠΎ ΡΡΠΎ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΎΡΡΠ²ΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ β Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ. ΠΠΎΠ»ΡΡΠΈΠ΅ ΠΏΡΠΈΡΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Process API, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΠ·Π½Π°ΡΡ pid Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ. Process API ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Ρ Π°ΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π°Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ·ΠΎΠ²ΠΎΠ² shell Ρ ΠΏΠ°ΡΡΠΈΠ½Π³ΠΎΠΌ output ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ, ΡΠΉΠ΄ΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π·Π°Π»Π΅Π·Π°ΡΡ Π² native. Π’Π°ΠΊΠΈΠ΅ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·Π±ΡΠΎΡΠ°Π½Ρ ΠΏΠΎ ΠΊΠΎΠ΄Ρ class libraries, Π½ΠΎ Π½Π΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² API ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΡΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠΎΠ±ΡΠ°Π½Ρ Π² Milling Project Coin. Π‘Π°ΠΌΠΎΠ΅ Π·Π°ΠΌΠ΅ΡΠ½ΠΎΠ΅ β ΡΡΠΎ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΡ (default) ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° ΠΏΡΠΈΠ²Π°ΡΠ½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΠ±ΡΠΈΠΉ ΠΊΠΎΠ΄. Π Π°Π½ΡΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΡΠ½Π΅ΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π² public ΠΌΠ΅ΡΠΎΠ΄, Π½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ»Π° Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ³ΠΎ API, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ³ΠΎ Π΄Π°Π½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ. Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ private. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π΅Π½ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ API ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π·Π°ΡΠΎ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠΈΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ΄Π΅Π»Π°ΡΡΒ ΡΠΈΡΠ΅ ΡΠΎΡ API, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΒ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
β ΠΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π°Π²Π½ΠΎ, ΠΎΠΊΠΎΠ»ΠΎ Π΄Π΅Π²ΡΡΠΈ Π»Π΅Ρ, ΡΡΠΎΠΊΠΈ Π²ΡΡ ΠΎΠ΄Π° ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠ»ΠΈΡΡ Π½Π΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. ΠΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ JavaOne 2015 ΡΡΠ° ΡΠ΅ΠΌΠ° Π±ΡΠ»Π° ΡΠ΄ΠΎΡΡΠΎΠ΅Π½Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄ΡΠΈΠΊΠΎΠ² (Alan Bateman, Alex Buckley, Mark Reinhold). Π’Π°ΠΊΠΎΠΉ Π°ΠΆΠΈΠΎΡΠ°ΠΆ Π²ΠΎΠΊΡΡΠ³ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²Π°ΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°?
β ΠΡΠΎΠ΅ΠΊΡ Jigsaw ΠΏΠΎΡΡΠ½ΡΠ» Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. Π― ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ Jigsaw ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΈΠ΅ Π΄Π²Π΅ ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΡΠ°ΡΡΠΈ, ΠΏΠ΅ΡΠ²Π°Ρ β ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΡΠ·ΡΠΊΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. ΠΡΠΎΡΠ°Ρ ΡΠ°ΡΡΡ β ΡΡΠΎ ΡΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π±ΡΠ»Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ class libraries Π² jdk. Π§Π°ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΅Ρ Π°Π»Π°, Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ°Π»ΠΈ deprecated ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π»ΠΈ Π±ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΡ ΡΠ½Π°ΡΡΠΆΠΈ.
ΠΠΎΠ»ΡΡΠΈΠ΅ Π΄Π΅Π±Π°ΡΡ Π±ΡΠ»ΠΈ ΠΏΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ reflection. Π Π°Π½ΡΡΠ΅ ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ» Π΄ΠΎΡΡΡΡΠ°ΡΡΡΡ Π΄ΠΎ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΡΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ Π½Π° Π»Π΅ΡΡ ΡΠ΅ΡΠ΅Π· reflection ΠΈ ΠΈΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΡΡΠΈ. Π’ΠΎ Π΅ΡΡΡ Π±ΡΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ, Ρ Π±Ρ ΡΠΊΠ°Π·Π°Π», ΡΠΊΡΠΏΠ»ΠΎΠΉΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΡΠΎ Π±Ρ ΠΎΡΡΠ°Π·ΠΈΠ»ΠΎΡΡ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡ . ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π²Π°ΠΌΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΡΡ ΡΠ·ΡΠΊΠ° Π²ΡΡΠ»ΠΈ ΠΊ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ, ΡΡΠΎΠ±Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ, Π·Π°ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠΈ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΡΠ°Π·Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠ°Π»ΠΎ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ. ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΊΠΎΠ΄Π° Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΡ Π²Π΅ΡΡΠΈΡ Ρ Π½ΠΈΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ, ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΡΡΠΌΠΎΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΈΠΌ: Β«ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° Π΄Π΅Π²ΡΡΡΡ Π²Π΅ΡΡΠΈΡ Π»ΠΎΠΌΠ°Π΅Ρ Π²ΡΡΒ». ΠΡΠΈ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡ Π±ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ.
ΠΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΏΡΠΎ Jigsaw Π² ΠΏΡΠΎΡΠ»ΠΎΠΌ Π³ΠΎΠ΄Ρ Π±ΡΠ»ΠΎ Π½Π° JavaOne, ΠΏΠΎΡΡΠΈ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½Π° Devoxx Π² ΠΠ½ΡΠ²Π΅ΡΠΏΠ΅Π½Π΅. Π ΡΡΠΎΠΌ Π±ΡΠ΄ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Ρ, Π½ΠΎ Π±ΡΠ΄ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΠΎΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π»ΡΠ΄Π΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π±ΡΡΠ° ΠΈΠ· IBM ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, Π΅ΡΡΡ Π»ΠΈ ΠΆΠΈΠ·Π½Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ. Π― Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠΌ Π±ΡΠ΄Ρ ΠΆΠ΄Π°ΡΡ Π²ΠΈΠ΄Π΅ΠΎΠ·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ JavaOne 2016.
β ΠΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅ β ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΠ°ΠΊΡΠΎΠ²Π°ΡΡ Β«ΡΠΎΡΡΠ°Π²Π½ΡΠ΅Β» ΡΠ°ΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ: module name, exports ΠΈ requires? Π₯ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΏΠΎΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅ΠΉ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π½Π° Β«requiresΒ» ΠΈ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΆΠ΅ ΠΌΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΌΠΎΠΆΠ΅ΠΌ Β«ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΒ», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«requires localΒ» ΠΈΠ»ΠΈ Β«requires optionalΒ»?
β ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΊΠ½ΠΈΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π½Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°, Π²Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ Π΅Π³ΠΎ Ρ Π½ΡΠ»Ρ. Π£ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΡ ΠΈ Π²Ρ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠ»ΠΈ ΠΈΡ Π² ΡΠ°Π·Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ , ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ Ρ Π½ΠΈΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ, ΠΈ ΠΎΠ½ΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ . ΠΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΌΡ-ΡΠΎ ΠΊΠ»Π°ΡΡΡ ΠΈΠ· ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π½ΡΠΆΠ½Ρ ΠΊΠ»Π°ΡΡΡ ΠΈΠ· Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΠ½ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ ΠΌΠ½Π΅ Π½ΡΠΆΠ΅Π½, ΡΠΎ Π΅ΡΡΡ requires, Π²ΠΎΡ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π²Π°, ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ Π΅ΠΌΡ Π½ΡΠΆΠ½Ρ. ΠΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΡΠΎΠ³Π°Ρ, Π΅ΡΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡΠΌΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠ΅ΠΉ ΡΡΠΎΠ²Π½Ρ ΠΏΠ°ΠΊΠ΅Ρ, ΡΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ requires.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ : ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠ·ΡΠΊΠ° Java. JVM Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠΉΠ΄Π΅Π½Ρ, ΡΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ°ΠΊ, ΡΠ΅ΡΡΠ½ΠΎ, Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡ ΠΎΡΠΊΡΠ΄Π° ΡΠ³ΠΎΠ΄Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΡΠ±Π»ΠΈΡΡΡΡΡΡ ΠΈ Π² javac, ΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ JVM Runtime. Requires ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ, ΡΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΊΠ°ΠΊΠΎΠΌ ΡΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ Π΄Π²Π° ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ ΡΡΠΈ. ΠΡΠ»ΠΈ ΡΠ΅ΠΌ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π½ΡΠΆΠ½Ρ Π΅ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠΎ ΡΡΡΠΎΠΈΡΡΡ ΡΠ°ΠΊΠ°Ρ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½Π°Ρ ΡΠ΅ΠΏΠΎΡΠΊΠ° Ρ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ ΡΠ°Π±ΠΎΡΡ, ΡΡΠΎ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈΠ· ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π½Π°ΠΌ Π΄ΠΎΡΡΡΠΏΠ½Ρ.
ΠΠ°ΡΠ΅ΠΌ, exports β ΡΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ½ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ. ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ°Π·Ρ β ΡΡΠΎ ΡΡΠ»ΠΎΠ²Π½Π°Ρ «*», ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π²ΡΠ΅, ΠΊΡΠΎ Ρ ΠΎΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π΅ ΡΠΎ, ΡΡΠΎ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ, Π° Π»ΠΈΡΡ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠΎΠ²Π°Π½Ρ public, Ρ.Π΅. ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΠΊΠ΅ΠΉΠΏΡΡΡΡ, ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ ΡΠ΅ΡΠ΅Π· ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ. ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ export to ΠΊΠΎΠ³Π΄Π° Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ Π½ΠΈΠΊΠΎΠΌΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ°Π½ΡΠ°ΠΉΠΌ ΡΠ»Π°Π³ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° Π΄Π»Ρ ΡΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΡΡΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Ρ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠ»ΠΈ Π±Ρ Ρ Π½Π΅Π³ΠΎ Π½Π΅ Ρ Π²Π°ΡΠ°Π»ΠΎ ΡΠΊΡΠΏΠΎΡΡΠΎΠ² Π΄Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, Π½ΠΎ ΡΡΠΎ Π²ΠΈΠ΄ΠΈΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΡΠ°ΠΏ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ, ΠΏΠΎ ΠΈΠ΄Π΅Π΅, Π²ΡΠ΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π² ΠΌΠΎΠ΄ΡΠ»Π΅. Π’.Π΅. ΠΌΠΎΠ΄ΡΠ»Ρ β Π½Π΅ΠΊΠ°Ρ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½Π°Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ° Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ΅ΠΉ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΈ ΡΡΠΎ Π½Π΅Ρ ΡΡΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΡΡΠΎ ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΡΠ°ΠΌΠ° jdk ΠΏΠ΅ΡΠ΅ΡΡΡΠΎΠ΅Π½Π° ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π²Π΅ΡΡ Π½Π°Π±ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ jdk ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ» Π½Π°Π±ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΠΎΠΉ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π½Π΅ΠΊΠΈΠΉ subset jre, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ. Π ΡΡΠΎΠΉ ΡΠ²ΡΠ·ΠΈ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΡΠΈΠ»ΠΈΡΠ° jlink, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ±ΡΠ°ΡΡ Run-Time Image ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΡ ΠΈΠ· ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ. ΠΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² Java 8 Ρ ΠΏΡΠΎΡΠΈΠ»ΡΠΌΠΈ.Β Π jdk 8 ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎΒ ΡΠΎΠ±ΡΠ°ΡΡ jdk ΠΏΠΎΠ΄ ΡΠ°Π·Π½ΡΠ΅ ΠΏΡΠΎΡΠΈΠ»ΠΈ Ρ ΡΠ°Π·Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠ°Π·Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ, Π½ΠΎ ΡΡΠΎ, ΡΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ°ΠΊ, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ±ΠΎΡΠΊΠ°, Π±Π΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΆΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ. Π jlink ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΡΠΎΠ±ΡΠ°ΡΡ Π½Π΅ΠΊΠΈΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠΉ Runtime, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΠΌΠΎΠ΄ΡΠ»Ρ java.base, Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΈ Π°Π²ΡΠΎΡΡ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² java 9 Paul Bakker ΠΈ Sander Mak ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ. Π‘ΠΎΠ±ΡΠ°Π»ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌ ΡΠ°Π½ΡΠ°ΠΉΠΌΠΎΠΌ β ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 20 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ. ΠΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Β swing-ΠΎΠΊΠΎΡΠΊΠΈ, ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° Π²ΡΡΠΎΡ Π΄ΠΎ 50 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ. ΠΡΠ°Π½ΠΈΡΡ JDK Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°Π·ΠΌΠ°Π·ΡΠ²Π°ΡΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π²Π½ΡΡΡΠΈ jdk ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ jdk, ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, Ρ.Π΅. ΡΠ°ΠΊΠΈΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΏΠΎ ΡΠ°Π·Π½ΠΎΠΌΡ Π±ΡΠ΄ΡΡ ΡΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Π½Ρ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΠΎΠ±Ρ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊ ΠΏΠΎΡΠ΅Π» ΠΈ ΡΠΊΠ°ΡΠ°Π» Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ jdk, Π° ΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠΌ Runtime`ΠΎΠΌ.
β Π ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ «Dependency hell» ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±ΡΡΡ Π½Π°Π²ΡΠ΅Π³Π΄Π°?
β ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½-ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΎΡΠ΅Π½Ρ Π΄Π»ΠΈΠ½Π½ΡΡ ΡΡΡΠΎΡΠΊΡ classpath, Π³Π΄Π΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ jar, ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ², Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΠ°ΡΠ°ΡΡΡΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎ Π² ΠΊΠ»Π°ΡΡΠ°Ρ Π·Π°Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΎΠ΄Π½ΠΈΡ ΠΈ ΡΠ΅Ρ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΈ ΡΠΎΠ³Π΄Π° Runtime Π±Π΅ΡΠ΅Ρ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π½ΡΡΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² classpath. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡΠ΄Π΅ΠΉ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΈ ΡΠ°ΠΊΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Ρ ΠΌΠ΅ΡΡ jar Π² class-ΠΏΡΡΠΈ ΠΌΠ΅Π½ΡΠ»ΠΎΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΎΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΡΠ΅ΡΠ°Π΅ΡΡΡ Π½Π° ΠΊΠΎΡΠ½Ρ.
ΠΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ ΠΊΠ»Π°ΡΡΡ ΡΠ°Π·Π»ΠΎΠΆΠ΅Π½Ρ ΠΏΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌ, ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½-Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°Ρ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π΄Π²Π° ΠΌΠΎΠ΄ΡΠ»Ρ Π² Π΄Π²ΡΡ jar ΠΈ ΠΎΠ±Π° ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΡΠΎ ΡΠ°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Ρ.ΠΊ. ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ. ΠΡΠΈ ΡΡΠΎΠΌ Jigsaw Π½Π΅ ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²Π΅ΡΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ, Ρ.Π΅. ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΉ Π² ΡΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΡ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ Π²ΠΈΠ΄Π΅ΡΡ Π²Β package manager-Π°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Linux.
ΠΠ°Π΄Π°ΡΠ° Π²Π΅ΡΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΡΠ»Π° Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ , Π½ΠΎ ΠΏΠΎΡΠΎΠΌ Π΅Ρ ΡΠ½ΡΠ»ΠΈ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ β Π·Π°ΠΏΠΈΡΠ°ΡΡ Π²Π΅ΡΡΠΈΡ Π² ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅. ΠΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ ΡΡΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, Π½ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ, ΡΡΠΎ ΠΎΡΠ΄Π°Π½ΠΎ Π½Π° ΠΎΡΠΊΡΠΏ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ OSGi, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ ΠΏΠΎΠ²Π΅ΡΡ . ΠΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. ΠΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ Ρ ΠΎΡΠ΅Π»ΠΈ ΠΎΡΠ΄Π°Π²Π°ΡΡ classloader`Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ Π²Π½Π΅ΡΠ½Π΅ΠΌΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
β ΠΠΎΡΠ²ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²ΠΈΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ: Named Modules, The Unnamed Module, Automatic Modules. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ Π½ΠΈΡ ? Π ΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΡ ΠΈΡ ΠΎΡΠ»ΠΈΡΠΈΡ ΠΈ ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΈΠ²Π½ΠΎΡΠΈΡ Π² ΠΎΠ±ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ?
β ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ Β«Ρ Π½ΡΠ»ΡΒ», ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ, ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ, Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅Β ΡΠ°ΠΉΠ» module-info.java, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ exports ΠΈ requires. Π’Π°ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ β ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΡΠ»ΠΈ Π²Ρ ΠΆΠΈΠ²Π΅ΡΠ΅ ΠΏΠΎ ΡΡΠ°ΡΠΈΠ½ΠΊΠ΅ ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ Π·Π°ΠΊΠΈΠ΄ΡΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π· classpath, ΠΎΠ½ΠΈ ΡΠΎΠΆΠ΅ ΠΎΠΊΠ°ΠΆΡΡΡΡ Π² ΠΌΠΎΠ΄ΡΠ»Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Unnamed Module. ΠΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ Π½Π΅ Π½Π°Π·Π²Π°Π»ΠΈ, Π΅ΡΡΡ Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΏΡΠΈΠ±Π΅ΠΆΠΈΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΠΏΠ΅ΡΡ Π΄Π΅Π²ΡΡΠΊΠ° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
ΠΡΡΡ Π½Π΅ΠΊΠ°Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½Π°Ρ ΡΡΠ°Π΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, jar ΡΠ°ΠΉΠ», Π² Π½Π΅ΠΌ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΡ, Π²Ρ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ Π½Π΅ Π² classpath, Π° Π² modulepath, ΡΠΎΠ³Π΄Π° Runtime Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π΅Π³ΠΎ ΡΠ΅Π±Π΅ ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ jar-ΡΠ°ΠΉΠ»Π°, ΠΈ Ρ Π½ΠΈΠΌ Π΄Π°Π»ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ Ρ Named ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, ΠΈ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π½Π΅Π³ΠΎ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΡΠ²ΠΎΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡ Π·Π°Π²ΠΈΡΠΈΡΠ΅ ΠΎΡ ΠΊΠ°ΠΊΠΎΠΉ ΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΅ΡΡ Π½Π΅ Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π° Π² ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΡΠΎ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ jar Ρ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Π² modulepath. ΠΠ½ ΡΡΠ°Π½Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ Π² module-info.java ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ»Π°ΡΡΡΡ: requires ΠΈ Π΄Π°Π»ΡΡΠ΅ ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΅ΠΌΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π½Π΅Π΄Π΅Π»ΠΈ, ΠΈ Π΅ΡΡ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΠΏΡΠΈΠ½ΡΡ ΡΡΠΎ proposal ΠΈΠ»ΠΈ Π½Π΅Ρ. Π― ΡΠΆΠ΅ ΡΠΊΠ°Π·Π°Π» ΡΡΡΡ ΡΠ°Π½ΡΡΠ΅, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ reflection, Π΅ΡΠ»ΠΈ ΡΠ°Π½ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΡΡΡΡΠ°ΡΡΡΡ Π΄ΠΎ ΡΠ΅Π³ΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ, ΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π·Π°ΡΠΈΡΠ°, ΠΈ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅ΠΉΡΠ°Ρ ΠΈΠ΄ΡΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡ, Ρ ΠΎΡΡ ΡΡΠΎ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ β weak ΠΌΠΎΠ΄ΡΠ»Ρ.
Weak ΠΌΠΎΠ΄ΡΠ»Ρ β ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠΎΠ΄ Π² ΡΡΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠ΅Π· reflection Π΄ΠΎΡΡΡΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ , ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ΅Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π½Π°ΡΡΠΆΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ. ΠΡΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΉΡΠΈ ΡΡΠΎΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π½ΡΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΡΠ΅Π· reflection Π΄ΠΎΡΡΠ°Π²Π°ΡΡ, Π΄ΠΎΡΡΡΡΠ°ΡΡΡΡ Π΄ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ°Π»ΡΡ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ weak ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΡΠΎΠΉΠ΄Π΅Ρ Π½Π° Π½Π΅Ρ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΎΠ½ΠΈ ΠΎΡΡΠ°Π½ΡΡΡΡ Π² ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΡΠ΅Π»ΡΡ . ΠΠ°ΠΊ ΠΈ Automatic ΠΌΠΎΠ΄ΡΠ»ΠΈ β ΡΡΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ ΠΏΡΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΎΡ Π½Π΅ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡ.
OSGi vs Jigsaw: Ρ ΠΎΠ»ΠΈΠ²Π°ΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ
β ΠΠΎΡΠ΅ΠΌΡ Π½Π΅ Π±ΡΠ»Π° ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° OSGi Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΠΈ Java? ΠΡ ΡΠΎΠ³Π»Π°ΡΠ½Ρ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ Mark Reinhold: Β«The OSGi module layer is not operative at compile time; it only addresses modularity during packaging, deployment, and execution. As it stands, moreover, itβs useful for library and application modules but, since itβs built strictly on top of the Java SE Platform, it canβt be used to modularize the Platform itselfΒ»? Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡ Penrose Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ OSGi/Jigsaw. (ΠΠΎΠ΄ΡΠ»ΡΠ½ΡΠΉ ΡΠ»ΠΎΠΉ OSGi Π½Π΅ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ; ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΡΠ½ΠΎΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π°ΡΡ ΠΈΠ²Π°ΡΠΈΠΈ, ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² ΡΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ (OSGi) Π΅ΡΡΡ, ΠΎΠ½ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΡΡΠΎΠ³ΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Java SE Platform ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (ΠΏΡΠΈΠΌ. ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π°Π²ΡΠΎΡΠ°).
β Π― ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΠ» OSGi, ΠΈ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΡΡ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ Π²ΡΡ-ΡΠ°ΠΊΠΈ Π½Π΅ OSGi ΡΡΠ°Π» Jigsaw. ΠΠ΅ΡΠ²ΡΠΉ ΠΎΡΠ²Π΅Ρ Π½Π° ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ, Π΅Π³ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΠ» Mark Reinhold: ΡΠ°ΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΏΠΎΠ²Π΅ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Java SE, Π΅ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΡΡΠ°Π²ΠΊΡ Java SE ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΡΠΎ Π΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, ΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ OSGi Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΎ-ΡΠΎ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅. Π ΡΠ΅Π»ΠΎΠΌ OSGi ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ class loading`Π°, ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠΈΠΉ OSGi environment classloader, ΠΏΠΎΡΠΎΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ bundle OSGi ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ classloader’Ρ, ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅ΠΊΠΎΠ΅ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΊΠ»Π°ΡΡΠΎΠ².
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Jigsaw Π΄Π΅Π»Π°Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, Π½ΠΎ ΡΠΆΠ΅ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΡΠΎ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΌΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠ΅ ΡΠ΅ΠΊΡΠ΅Ρ, ΡΡΠΎ Π²Π½ΡΡΡΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΊΠ»Π°ΡΡ Π°Π΄ΡΠ΅ΡΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ: classloader ΠΈ Π΄Π°Π»ΡΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ ΠΈ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΡΠ΅ΡΠ΅Π· Π²ΠΎΡ ΡΡΡ ΠΏΠ°ΡΡ. Π Π΅ΡΠ»ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° βΒ ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π»ΠΈΡΠ΅ΡΠ°Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ, ΡΠΎ classloader β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΡΠ΅ΡΠ΅Π½Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ class loading’a. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ»ΡΡΠ°Π΅ persist’a, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ ΠΏΠΎΡΠΎΠΌ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΡΠ°Π΅ΠΌΡΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, ΡΡΠΎΡ ΡΠ΅ΡΠ΅ΡΠ΅Π½Ρ ΡΠ΅ΡΡΠ΅Ρ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΡΠΌΡΡΠ», Ρ classloader’Π° Π½Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΡΠ΅ΡΠ°Π»Π°. ΠΡΠΎ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ Π²ΠΎΡ Π² ΡΠ°ΠΊΠΎΠΌ ahead of time ΡΡΠΈΠ»Π΅. ΠΠΎΡΡΠΎΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Jigsaw ΡΠ΅ΡΠΈΠ»ΠΈ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ Π±Π°Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ class loading’a, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² OSGi. Π OSGi ΡΠ°ΠΊ ΡΠ΄Π΅Π»Π°Π»ΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅, ΡΡΠΎ ΠΈΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°, ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π²ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ class resolution.
β ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ OSGi ΠΈ Jigsaw Π½Π° ΡΠ°Π·Π½ΡΡ ΡΡΠΎΠ²Π½ΡΡ .
β ΠΠ°, ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΠΎ. Jigsaw ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅. Π ΡΡΠ°ΡΡΡΡ ΠΈΠ»ΠΈ Π½Π΅ΡΡΠ°ΡΡΡΡ. ΠΠ°Π²Π΅ΡΠ½ΠΎΠ΅, ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½Π΅ΡΡΠ°ΡΡΡΡ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΡΠΆΠ΅ ΡΡΠΏΠ΅Π» Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ OSGi. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΊΠ°ΠΊ-ΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΈΠΏΠ° Penrose, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JSON-ΡΠΊΡΠΈΠΏΡΠ°, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, Jigsaw-ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ OSGi-ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅. ΠΡΠΈΠ΄ΡΡΡΡ ΡΠΊΡΠ΅ΡΠΈΠ²Π°ΡΡ ΡΡΠΈ Π΄Π²Π° ΠΌΠΈΡΠ°, ΠΈ Ρ ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ OSGiΒ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ, ΠΆΠΈΠ·Π½Ρ ΡΡΠ°Π½Π΅Ρ Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅.
β ΠΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅ classloader’ΠΎΠ²?
β ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ ΡΠ°ΠΊΠΈΠ΅ ΡΠΆ ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ΅. Π Π°Π½ΡΡΠ΅ Ρ Π½Π°Ρ Π±ΡΠ» ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΡΡΠ΅Ρ ΡΡΡΠΏΠ΅Π½Π΅ΠΉ, ΡΡΠΎ Bootstrap classloader, Extension classloader ΠΈΒ Application classloader, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π½ΡΡΠ΅Β Π±ΡΠ» instance of URL classloader. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Java 9 ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Extension classloader ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² Platform classloader ΠΈ ΡΠ²ΡΠ·Π°Π½ΠΎ ΡΡΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΠ°Π½ΡΡΠ΅ Extension ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΊΠ»Π°ΡΡΠΎΠ², Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ ΠΊ jdk, ΠΈΡ Π±ΡΠ»ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ. Π Java 9 ΠΏΡΠΎΠ²Π΅Π»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ Ρ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠ·ΠΈΡΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΈΠ· Bootstrap classloader, ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Platform classloader. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Application classloader, Π΅ΡΠ»ΠΈ ΡΠ°Π½ΡΡΠ΅ ΠΎΠ½ Π±ΡΠ» instance of URL classloader, ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠΎ instance Π½Π΅ΠΊΠΎΠ³ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΎ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ»ΠΎΠΌΠ°Π»ΠΎ Gradle, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΡΠΎ Π·Π½Π°Π½ΠΈΠ΅, ΠΎΠ½ ΠΈΡΠΊΠ°Π» instance of URL classloader β ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ Gradle ΡΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Jigsaw ΠΈ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΌ ΡΠ΅ΡΠ΅Π½Π°.
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΈ Π·Π½Π°Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π» Gradle, Π½ΠΈΡΠ΅Π³ΠΎ ΡΠΈΠ»ΡΠ½ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠ΅ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΊΠ°ΠΊ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Ρ Application classloader’ΠΎΠΌ. ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π»ΡΠ΄Π΅ΠΉ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΉΠ΄ΡΡ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ.
ΠΠ° ΡΡΠΎΠ²Π½Π΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² β ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
ΠΠ±Π»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ β ΡΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ Π½Π΅ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ, Ρ.Π΅. ΠΎΠ½ Π½Π΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΠΊΠ΅Ρ Π½Π°ΡΡΠΆΡ, Ρ Π½Π°Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π΅Π»Π°ΡΡΒ Whole Program Optimization, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π½ΡΡΠ΅ Π±ΡΠ»ΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ, Ρ.ΠΊ. ΡΠ°Π½ΡΡΠ΅ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠ³ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π² Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΠ΅Π»ΡΠΉ ΠΏΠ»Π°ΡΡ jit-ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΠ» Π½Π°ΠΌ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½. ΠΠΏΠ»ΠΎΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΠΎ Oracle ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°Π΄ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ahead of time ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΡΠΆΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² jmod, ΡΡΠΎ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΎΡΠΌΠ°Ρ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠ° ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΊΠ»ΡΡΡΠ½ Π² ΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ. ΠΠΎ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Ρ Π²ΠΈΠ΄Π΅Π» ΠΏΠΎΠΊΠ° ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° Π΅ΡΠ΅ Π½Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅Π½Π° Π΄ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°.
Π Π΅ΡΠ°Π΅ΠΌ Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΡ: ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ΅ΡΠ΅ΠΆΠ΅Π½ΠΈΡ
β ΠΠ°ΠΊΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ Ρ Π²Π°Ρ ΡΠ»ΠΎΠΆΠΈΠ»ΠΎΡΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ?
β ΠΠ΅ ΠΌΠΎΠ³Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΠΊΠ° ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΎΠΏΡΡ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Jigsaw ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ. ΠΠΎΠ³Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ ΡΠΈΡΠ°ΡΠ΅Π»ΡΠΌ Π²Π·ΡΡΡ Ρ ΡΠ΅ΡΡΠΎΠΌΠ°ΡΠΈΠΉΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Ρ Π΄Π²ΡΠΌΡ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, Π³Π΄Π΅ ΠΎΠ΄ΠΈΠ½ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ, Π° Π²ΡΠΎΡΠΎΠΉ ΡΡΠΎ-ΡΠΎ requires. ΠΠ°Π»Π΅Π΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΠΎΠ»ΡΡΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«Hello WorldΒ». Π ΠΏΠΎΡΠΎΠΌ ΡΡΠΎΠΈΡ Π²Π·ΡΡΡ ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ-ΡΠΎ: ΡΠ±ΡΠ°ΡΡ requires ΠΈΠ»ΠΈ exports. ΠΠΎΠΌΠ΅Π½ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π» Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ Π»Π΅ΠΆΠΈΡ, ΠΏΠΎΠΌΠ΅Π½ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½Π° ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΡ, Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π² Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄ΡΡΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠΈΡΡΡ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ»ΡΡΠΈΡΡΡ.
Π― Π±Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π²ΠΎΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½Π° ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ IDE, ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π° ΠΏΠΎΡΠΎΠΌ Π΅Π³ΠΎ ΡΠ»ΠΎΠΌΠ°ΡΡ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ.
ΠΠΎ ΠΌΠΎΠΈΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ°Π·Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΡΡΠΎΠ΄Π½ΠΈ ΡΠ°ΠΊΠΎΠ²ΡΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π΄ΠΎΡΡΡΡΠ°ΡΡΡΡ Π²Π½ΡΡΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΊ private ΠΊΠ»Π°ΡΡΡ ΠΎΡΠΊΡΠ΄Π°-ΡΠΎ, Ρ Π²Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. Π’Π°ΠΊΡΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΡ javac ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π΄Π΅Π»Π°Π΅Ρ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π΄ΠΎΡΡΡΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ. Π ΡΠ°ΡΡΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ Ρ Π½Π΅ Π²ΠΈΠΆΡ Π±ΠΎΠ»ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΌΠ΅Π½ΡΡΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΠ»ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈ class resolution, Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΈΠ»ΡΠ½Π°Ρ ΡΠ°Π·Π½ΠΈΡΠ° Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ. Π’.Π΅. ΡΡΠΎ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ²Π΅Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, Π½ΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅.
β Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠ°ΡΡΠ΅, IDE ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΎΡΠ° ΡΠ·ΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Β«JigsawΒ». ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°Π½Π° Π·Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π§ΡΠΎ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ?
β Π‘Π°ΠΌΠ°Ρ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠ΄ΡΡ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΠ»Π³ΠΎ, ΡΠ°ΠΌΠΎ ΡΠ»ΠΎΠ²ΠΎ module ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π½Π°ΡΠ½ΠΎ, ΠΈ ΠΏΠΎΠΏΡΡΠΊΠΈ Π½Π°ΠΉΡΠΈ ΠΎΡΠ²Π΅ΡΡ Π½Π° StackOverflow ΠΈΠ»ΠΈ Π² Google Π·Π°ΡΠ°ΡΡΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ Π½Π° ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ ΡΠ΅ΠΊΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡΠ΅Π½Ρ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π΄Π°ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ².
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Ρ IDE: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΠΎΡΠ° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ Ρ ΠΎΡΠΊΡΡΠ» IDEA, ΠΈ ΡΠ°ΠΌ ΡΠΆΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΎΡΡ ΡΠ»ΠΎΠ²ΠΎ Β«ΠΌΠΎΠ΄ΡΠ»ΡΒ», Π½ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π»ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ Jigsaw. ΠΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π² IDE, ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ IDE ΡΠ²Π΅ΠΆΠ°Ρ, Ρ.ΠΊ. ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ²Π°ΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠ΅ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠ²Π° Β«ΠΌΠΎΠ΄ΡΠ»ΡΒ».
β ΠΠ΄Π½ΠΎ ΠΈΠ· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Jigsaw β Β«Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΠ°Β». ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΡΠ°Π»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π½Π° Π²Π°Ρ Π²Π·Π³Π»ΡΠ΄?
β ΠΡΠ»ΠΈ Π±Ρ Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» Π±Ρ Π±Π°Π³Π°ΠΆ Π·Π½Π°Π½ΠΈΠΉ ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , ΠΈΠ»ΠΈ Π±ΠΎΠ³Π°ΡΡΠΉ ΠΎΠΏΡΡ Ρ OSGi, Ρ Π±Ρ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Ρ Π²Π°ΡΠ°Π»ΡΡ Π·Π° Π³ΠΎΠ»ΠΎΠ²Ρ ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΠ», ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ Π΅Π³ΠΎ ΡΠ°ΠΊ ΡΠ΄Π΅Π»Π°Π»ΠΈ, Π° Π½Π΅ ΡΠ΄Π°ΠΊ. Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠΏΡΡΠ° Π½Π΅Ρ, ΠΈ ΠΏΡΠΈΠ½ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π²ΠΎΡ ΡΡΠΎ Π½ΠΎΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΡΡΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±ΡΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ.
Π Java 8 ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΡΠΈΠ»ΠΈΡΠ° jdep, ΠΎΠ½Π° Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΠΎΡΡΠ°Π²ΠΊΡ jdk, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ ΠΈ Π² Java 9 ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΡΡΠ°Π²ΠΈΡΡ Π²ΠΎΡ ΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ Π½Π° jar ΡΠ°ΠΉΠ» ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ module-info.java Π² ΡΠ°ΠΉΠ», ΡΠ°ΠΊ ΡΡΠΎ Π½Π° Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π³Π»Π°Π·Π°ΠΌΠΈ, ΠΏΠΎΠ΄ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΎ requires Π½Π°ΠΌ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ Π½ΡΠΆΠ½Ρ ΠΈΠ»ΠΈ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ. Jdep Π΄Π°Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ module-info.java, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ Π² ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π² ΠΊΠ°ΠΊΠΎΠΌ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π΅Π³ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, Ρ.Π΅. Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ Ρ Π½ΡΠ»Ρ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠ²ΠΎΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, jdep ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ Ρ ΡΡΠΈΠΌ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΈ ΠΎΡΠ΅Π½Ρ ΡΠΈΠ»ΡΠ½ΠΎ Π² ΡΡΠΎΠΌ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ.
Π― Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ.
Π ΠΌΠΎΠ΄ΡΠ»ΡΡΠ½ΠΎΡΡΠΈ Java 9 Π½Π° Joker 2016 ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅Ρ Sander Mak, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΠΉΡΠ°Ρ Π³ΠΎΡΠΎΠ²ΠΈΡ ΠΊΠ½ΠΈΠ³Ρ Java 9 Modularity Π΄Π»Ρ O’Reilly, Π² ΡΠ²ΠΎΡΠΌ Π΄ΠΎΠΊΠ»Π°Π΄Π΅ Java 9 Modularity in Action.
ΠΡΠ»ΠΈ Π²Ρ Π»ΡΠ±ΠΈΡΠ΅ Β«ΠΊΠΈΡΠΎΡΠΊΠΈΒ» JVM ΠΈ ΠΆΠ΄Π΅ΡΠ΅ Java 9 ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ, ΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ Π²Π°ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Ρ Joker 2016:
ΠΠΎΠ»Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ β Π½Π° ΡΠ°ΠΉΡΠ΅.
Π‘Π΅ΡΠ²ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Java 9 — CoderLessons.com
ΠΡΠΎΠ²ΠΎΠ΄ΠΊΠ° ΠΈ ΠΏΠΎΠΈΡΠΊ
Π Java ΡΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ ServiceLoader
. ΠΠ½ Π±ΡΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² 1.6, Π½ΠΎ Ρ ΡΠ΅Ρ
ΠΏΠΎΡ ΠΎΠΊΠΎΠ»ΠΎ Java 1.2 ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΠΏΠΎΡ
ΠΎΠΆΠ°Ρ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΎ. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΠΈ Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»ΡΡΠ΅) ΠΈ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΡΠΈΡ
ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°: ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ / ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π΄Π΅ΡΠ°Π»ΠΈ.
ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊ ΡΠ»ΡΠΆΠ±Ρ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². Π ΡΡΠ΅Π΄Π΅ EE Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ. Π ΡΡΠ΅Π΄Π΅, Π½Π΅ ΠΎΡΠ½ΠΎΡΡΡΠ΅ΠΉΡΡ ΠΊ EE, Spring ΡΡΠ°Π» Π²Π΅Π·Π΄Π΅ΡΡΡΠΈΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅, Ρ ΠΎΡΡ ΠΈ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΎ ΠΆΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ, Π½ΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠ½Π²Π΅ΡΡΠΈΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (IoC) ΠΈ ΠΈΠ½ΡΠ΅ΠΊΡΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (DI), ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Spring, ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π»ΡΡΡΡΡ ΠΎΡΡΠ°ΡΠ»Π΅Π²ΡΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΡ, ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ / ΠΊΠΎΠ΄ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΊΠΈ ΠΎΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ.
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Spring ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ° ΡΠ»ΡΠΆΠ±, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΡΠ·Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π½ΡΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ ΡΠ»ΡΠΆΠ±. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΠΊΠΎΡΠΎΡΠΊΡΡ ΠΈ Ρ ΠΎΡΠΎΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΡΠ°ΡΡΡ ΠΎΠ± ΡΡΠΎΠΌ Π·Π΄Π΅ΡΡ .
ServiceLoader
Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°ΠΉΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π²Π½Π΅Π΄ΡΠΈΡΡ Π΅Π΅ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² Π½Π΅ΠΉ Π½ΡΠΆΠ΄Π°ΡΡΡΡ. ΠΠ»Π°Π΄ΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ ΠΈΡ
, ΠΈ ΡΡΠΎ Π½Π΅ Π±Π΅Π· ΠΏΡΠΈΡΠΈΠ½Ρ: ΠΎΠ½ΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Ρ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π²ΠΈΠ΄Π΅Π», Π½Π΅ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΊΡ ΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Spring Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΈ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. Π₯ΠΎΡΡ ΡΡΠΎ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΆΠΈΡΡ Ρ Π½ΠΈΠΌ ΠΈ Π±ΡΡΡ ΡΡΠ°ΡΡΠ»ΠΈΠ²ΡΠΌΠΈ. ΠΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΈΡ . ΠΠ½ΠΈ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ ΡΠΈΠ΄ΡΡ Π½Π° ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ XML-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Spring.
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ.
ΠΠ°, ΡΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π·ΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π²ΡΡΠΊΠ°Π·ΡΠ²Π°Π½ΠΈΡ, ΠΏΡΠΈΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΠΉΠ½ΡΡΠ΅ΠΉΠ½Ρ. ΠΡΠ»ΠΈ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ, Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ β Π½Π΅ ΡΡΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠΈΠ½ΡΠΈΠΏ KISS (ΠΏΡΡΡΡ ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΡΠΌ ΠΈ Π³Π»ΡΠΏΡΠΌ). ΠΠΎΠ΄, Π° Π½Π΅ Π²Ρ.
ServiceLoader
Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΠ΅ Π²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π° ΠΏΡΡΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ. ΠΠ½ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Β«ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΡΡΡΡΡΒ». (Π― ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΏΠΎΠ·ΠΆΠ΅, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΡΠ΅ΠΌΡΠΉΒ».) ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° Java Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ ΡΠ΅ΡΠ΅Π· Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΏΡΡΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ?
ΠΡΠΎΡΠΌΠΎΡΡ ΠΏΡΡΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ
ΠΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΡΡΡ, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ServiceLoader
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π΄Π°ΠΆΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠΎΠ΄ Java Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΠΎΡΠΈΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ
ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΏΡΡΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Ρ Π»Π³Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Spring ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΊΠ»Π°ΡΡΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ² Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. ΠΠ΅ΡΠ½Π° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΠ±ΠΌΠ°Π½ΡΠ²Π°Π΅Ρ. Π― ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ. ΠΠΎΠΊΠ° ΡΡΠΎ ΠΏΡΠΈΠ·Π½Π°ΠΉΡΠ΅, ΡΡΠΎ ΠΏΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π½. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ClassLoader
Π²Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π±Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π» ΠΌΠ°ΡΡΠΈΠ², ΠΏΠΎΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π½ΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠ»Π°ΡΡΡ Π΄Π°ΠΆΠ΅ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
ΠΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΡΠΎΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Java ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΊΠ»Π°ΡΡΡ. ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊ ΠΊΠ»Π°ΡΡΠΎΠ² Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΊΠ»Π°ΡΡΡ Π² JVM, ΠΈ JVM Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΡΠΊΡΠ΄Π°. ΠΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Π°Ρ . ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΊΠ»Π°ΡΡΡ, Π° Π½Π΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π°. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ»Π°ΡΡΡ Ρ ΡΠ°Π·Π½ΡΡ Π½ΠΎΡΠΈΡΠ΅Π»Π΅ΠΉ. Π’Π°ΠΊΠΆΠ΅ Π²Π°ΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π½Π°ΡΡ ΡΡΠΎ. ΠΡ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Spring, Hibernate ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ? ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· ΡΡΠΈΡ ΡΡΠ΅Π΄ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠΊΡΠΈ-ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊ ΠΊΠ»Π°ΡΡΠΎΠ² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ. ΠΠ»Ρ ΡΡΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ classpath. ΠΠ½ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡ ΠΊΠ»Π°ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ.
ΠΠ°Π΄Π½ΠΎ. Π₯ΠΎΡΠΎΡΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ. ΠΠΎ ΠΎΠΏΡΡΡ ΠΆΠ΅: ΠΊΠ°ΠΊ Spring Π½Π°Ρ
ΠΎΠ΄ΠΈΡ ΠΊΠ»Π°ΡΡΡ? ΠΠ΅ΡΠ½Π° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠΌΠ΅Π»ΠΎΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ: URLClassLoader
. ( ΠΠ°ΠΊ ΠΏΠΈΡΠ΅Ρ ΠΠΈΠΊΠΎΠ»Π°ΠΉ ΠΠ°ΡΠ»ΠΎΠ³ Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅, Ρ Java 9 ΡΡΠΎ ΡΠΆΠ΅ Π½Π΅ ΡΠ°ΠΊ.) ΠΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ classpath, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ URL-Π°Π΄ΡΠ΅ΡΠ°, ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ² URL-Π°Π΄ΡΠ΅ΡΠΎΠ².
ServiceLoader
Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΊΠ»Π°ΡΡΡ.
ΠΠ°ΠΊ ServiceLoader Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΊΠ»Π°ΡΡ
ServiceLoader ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ServiceLoader.load(interfaceKlass)
, ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Β«ΡΠΏΠΈΡΠΎΠΊΒ» ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Β«ΡΠΏΠΈΡΠΎΠΊΒ» ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ°Π²ΡΡΠΊΠ°ΠΌΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ServiceLoader
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Iterable
ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΡΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΠΈΠΊΠ»Π΅ for
Π²ΡΠ·ΡΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ load()
ΠΏΠΎΡΠ»Π΅ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ (:).
ΠΠ»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΡΠ°ΠΉΠ»Ρ JAR, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ META-INF/service
ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ°, Π² ΠΈΠΌΠ΅Π½ΠΈ Π΅ΡΡΡ ΡΠΎΡΠΊΠΈ, ΠΈ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°, Π½ΠΎ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ». ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ JAR.
ServiceLoader
Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ findResources
Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ URL-Π°Π΄ΡΠ΅ΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΈΠΌΠ΅Π½Π° ΠΊΠ»Π°ΡΡΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ ΡΠ½ΠΎΠ²Π° Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ClassLoader
Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΠΈΡ
ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠ»Π°ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠΊΡΡΡΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ServiceLoader
ΠΌΠΎΠ³ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ
.
ΠΠ°Π»ΠΈΡΠΈΠ΅ Π² ΡΡΠΈΡ
ΡΠ°ΠΉΠ»Π°Ρ
ΠΈΠΌΠ΅Π½ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎ.
Java 9, ΡΠΎΡ
ΡΠ°Π½ΡΡ Π½Π°Π΄ΠΎΠ΅Π΄Π»ΠΈΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ META-INF/services
ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»Π° Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄. Π‘ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Jigsaw Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΠΌΠ΅ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ServiceLoader
ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ Π΅ΠΌΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ΅ΡΠ΅Π· ServiceLoader
. ΠΡΠΎΡ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ»ΡΠΆΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² Π² ΠΊΠΎΠ΄ Java. Π§ΠΈΡΡΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΡΠΎΠ±Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠ±ΠΎΠΉ ΠΊΠΎΠ΄Π°.
Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²Π΅ΡΠΈ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡ
Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ (Π±ΡΠ΄ΡΡΠ΅Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ), Java 9 ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ»ΡΠΆΠ±Ρ, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ public static provider()
ΠΌΠ΅ΡΠΎΠ΄ public static provider()
ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. (ΠΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠΈΠΌ, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠ»Π°ΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ»ΡΠΆΠ±Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΡΠΎΠ³ΠΎ Ρ
ΠΎΡΠ΅Ρ, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΡΠΎ ΡΠ°Π±ΡΠΈΠΊΠ°, ΡΠ°ΠΊ Π·Π°ΡΠ΅ΠΌ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° SRP.)
ΠΠ±ΡΠ°Π·Π΅Ρ ΠΊΠΎΠ΄Π°
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°ΡΠ°ΡΡ ΠΌΡΠ»ΡΡΠΈΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Maven Ρ https://github.com/verhas/module-test
.
ΠΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Consumer
, Provider
ΠΈ ServiceInterface
. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ServiceLoader
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ»ΡΠΆΠ±Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ javax0.serviceinterface.ServiceInterface
Π² ΠΌΠΎΠ΄ΡΠ»Π΅ ServiceInterface
ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Provider
. Π‘ΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΈΡΡΠ½ΠΊΠ΅:
Π€Π°ΠΉΠ»Ρ module-info
ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 |
Β
Β
|
ΠΠΎΠ²ΡΡΠΊΠΈ
ΠΠ΄Π΅ΡΡ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π²Π°ΠΌ ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π³Π»ΡΠΏΡΡ
ΠΎΡΠΈΠ±ΠΊΠ°Ρ
, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠΎΠ²Π΅ΡΡΠΈΠ» Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΡΡΠΈΡΡΡΡ Π½Π° ΠΌΠΎΠΈΡ
ΠΎΡΠΈΠ±ΠΊΠ°Ρ
, Π° Π½Π΅ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΈΡ
. ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Java 9 Π² ServiceLoader
ΠΊΠΎΡΠΎΡΠΎΠ΅ Π³Π»Π°ΡΠΈΡ:
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ ΡΠ»ΡΠΆΠ±Π° Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ require, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΡΠ»ΡΠΆΠ±Ρ.
Π― Π½Π΅ Π·Π½Π°Ρ, ΡΡΠΎ ΠΎΠ½ Ρ ΠΎΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ, Π½ΠΎ ΡΠΎ, ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ Π΄Π»Ρ ΠΌΠ΅Π½Ρ, Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Ρ Π½Π΅Π²Π΅ΡΠ½ΠΎ ΠΈΡΡΠΎΠ»ΠΊΠΎΠ²Π°Π» ΡΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π²Π΅ΡΠΎΡΡΠ½ΠΎ.
Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ Consumer
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π΅ΡΡΠΎ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ javax0.serviceinterface.ServiceInterface
. ΠΡΠΎ ΡΡΠΎ-ΡΠΎ, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ Provider
ΠΈ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, Π½ΠΎ ΠΎΠ½ΠΎ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ½ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ require Π² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ServiceInterface
. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Provider
! ΠΠΎΠ΄ΡΠ»Ρ Provider
Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ServiceInterface
ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ. ΠΠΎΠ΄ΡΠ»Ρ ServiceInterface
Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ. ΠΠ½ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΊΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Provider
Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Consumer
Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠ°ΠΊΠ΅Ρ. Provider
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡ, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡΠΎΠΌ, Π½Π°Π·Π²Π°Π½Π½ΡΠΌ Π² ΡΠ΅ΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° with
Π² ΡΠ°ΠΉΠ»Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠΎΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ° ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π±ΠΎΠ»ΡΡΠ΅. Π§ΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ, Π±ΡΠ»ΠΎ Π±Ρ ΠΈΠ·Π»ΠΈΡΠ½ΠΈΠΌ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π΅Π³ΠΎ, ΠΈ ΡΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ·Π»ΠΈΡΠ½Π΅ ΠΎΡΠΊΡΡΠ»ΠΎ Π±Ρ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ΅, Π½ΠΎ ΡΠ²Π»ΡΡΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ. Consumer
Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° βm
, ΠΈ ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π» ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠ°ΠΊΠ΅Ρ.
ΠΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
1 2 3 4 |
|
ΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ mvn
. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° maven Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π²Π΅ΡΡΠΈΠΈ 3.6, ΠΈΠ½Π°ΡΠ΅ ServiceInterface-1.0.0-SNAPSHOT.jar Π±ΡΠ΄Π΅Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΏΡΡΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΡΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ module-info.class
ΡΠ°ΠΉΠ» module-info.class
.
ΠΠ°ΠΊΠΎΠΉ ΡΠΌΡΡΠ»
ServiceLoader
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΎ ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π’ΠΈΠΏΠΈΡΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ. Π― ΡΠ°ΠΌ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΡΡΠΈΠΌ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π» ScriptBasic Π΄Π»Ρ Java Ρ Java 7 Π½Π° Java 9. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΡΠ·ΡΠΊΠ° BASIC ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΈ ΠΈΡ
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ BasicFunction
. Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ, ΡΡΠΎΠ±Ρ Ρ
ΠΎΡΡ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΡΡΠ°ΠΈΠ²Π°Π»ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π² ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ
ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΡ
API Π² ΠΊΠΎΠ΄Π΅. ΠΡΠΎ Π»ΠΈΡΠ½Π΅Π΅ ΠΈ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. ServiceLoader
ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ»ΡΠΆΠ±Ρ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ( ClassSetProvider
) ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»ΡΠΆΠ±Ρ ΠΎΠ΄Π½Ρ Π·Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π² Π½Π°Π±ΠΎΡΠ°Ρ
. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Ρ
ΠΎΡΡ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π·Π½Π°ΡΡ ΠΎ ΠΊΠ»Π°ΡΡΠ°Ρ
ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠ»Π°ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠΌΠ΅ΡΠ°Π»ΠΈΡΡ Π² ΠΏΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ» ΡΡΠ»ΡΠ³Ρ.
Π‘Π°ΠΌ JDK ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠ². ΠΠΎΠ²ΡΠΉ Java 9 JDK ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ»Π°ΡΡ System.LoggerFinder
ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²ΠΈΡ Π»ΡΠ±ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, ΠΈ Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ServiceLoader
ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ System.getLogger()
ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΉΠ΄Π΅Ρ ΡΡΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ΠΎ ΠΊ JDK, Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ΠΎ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΎΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ JDK Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π°.
Π‘ΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΡΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π² ΡΠ·ΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π΄Π΅ΡΡΡΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΡΠΈΠΏ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΡ ΠΈΠΌΠΏΡΠ»ΡΡ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎΠΌ ΠΌΠ°ΡΡΡΠ°Π±Π΅, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΡΠ°Π½Π΅Π΅.
ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ Π½Π° Java Code Geeks Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΠΈΡΠ΅ΡΠ° ΠΠ΅ΡΡ
Π°ΡΠ°, ΠΏΠ°ΡΡΠ½Π΅ΡΠ° Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ JCG . Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ°ΡΡΡ Π·Π΄Π΅ΡΡ: Java 9 Module Services ΠΠ½Π΅Π½ΠΈΡ, Π²ΡΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°ΠΌΠΈ Java Code Geeks, ΡΠ²Π»ΡΡΡΡΡ ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ. |
Π‘Π°Π½Π΄Π΅Ρ ΠΠ°ΠΊ ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΊ Java-ΠΌΠΎΠ΄ΡΠ»ΡΠΌ β JUG.ru
ΠΡΡΠ»Π° Java 10 β Π·Π½Π°ΡΠΈΡ, ΠΏΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Java 9! Π¨ΡΡΠΊΠΈ ΡΡΡΠΊΠ°ΠΌΠΈ, Π½ΠΎ Ρ Π½Π΅ΡΠΎΡΠΎΠΏΠ»ΠΈΠ²ΠΎΡΡΡΡ ΠΈΠ½Π΄ΡΡΡΡΠΈΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΏΠΎΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ Jigsaw: ΡΡΠΌΠΈΡ Π° Π²ΠΎΠΊΡΡΠ³ Π½ΠΈΡ Π±ΡΠ»Π° Π² ΠΏΡΠΎΡΠ»ΠΎΠΌ Π³ΠΎΠ΄Ρ, Π° Π²ΠΎΡ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄ΡΠΌΠ°ΡΡΡΡ ΡΠΆΠ΅ Π² ΡΡΠΎΠΌ.
Π Π½ΠΎΠ²ΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅ ΠΏΠΎΠ΄ΠΊΠ°ΡΡΠ° InfoQ Π½Π° Π²ΠΎΠΏΡΠΎΡΡ ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡ ΠΎΡΠ²Π΅ΡΠΈΠ» Π‘Π°Π½Π΄Π΅Ρ ΠΠ°ΠΊ β ΡΠΎΠ°Π²ΡΠΎΡ ΠΊΠ½ΠΈΠ³ΠΈ Β«Java 9 modularityΒ», ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅ ΠΏΠ΅ΡΠ΅Π½ΡΠΊΡ ΡΡΠ΅Π». Π Ρ Π½Π°Ρ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ JPoint ΠΎΠ½ ΠΊΠ°ΠΊ ΡΠ°Π· Π²ΡΡΡΡΠΏΠΈΡ Ρ ΡΠ΅ΠΌΠΎΠΉ Β«Designing for modularity with Java modulesΒ». Π ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π½Π° ΡΡΡΡΠΊΠΈΠΉ ΡΠ°ΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΠΎΠ΄ΠΊΠ°ΡΡΠ΅: Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΡΠ»Π΅Π΄ΠΈΠ»ΠΈ ΠΏΡΠΈΡΡΠ°Π»ΡΠ½ΠΎ Π·Π° ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡΡΠΎ ΠΏΠΎΠ½ΡΡΡ Π³Π»Π°Π²Π½ΠΎΠ΅, Π° Π΅ΡΠ»ΠΈ ΡΠ°ΠΌΠΈ Π±ΡΠ΄Π΅ΡΠ΅ Π½Π° JPoint β ΡΡΠ°Π½Π΅Ρ Β«ΠΏΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌΒ» ΠΊ Π΄ΠΎΠΊΠ»Π°Π΄Ρ.
β Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π² ΠΌΠΈΡΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠ΅ΡΡΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ², Π½ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Java 9. Π‘ΡΠ΄Ρ ΠΏΠΎ Π²Π°ΡΠΈΠΌ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡΠΌ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π»ΡΠ΄ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΡΡ Π½Π° Π½Π΅Ρ?
β ΠΠ°, Π΄ΡΠΌΠ°Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΡΠΈΡΠΊΠ° ΡΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ, ΡΡΠΎ ΠΈΠ· ΡΡΠΈΡ ΡΠ΅ΡΡΠΈ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π½Π° Β«Π΄Π΅Π²ΡΡΠΊΠ΅Β» ΡΠ΅ΠΉΡΠ°Ρ ΠΌΠ΅Π½ΡΡΠΈΠ½ΡΡΠ²ΠΎ. ΠΠ° Java 8 Π»ΡΠ΄ΠΈ ΠΏΡΡΠ³Π°Π»ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΡΡΡΡΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ Π»ΡΠΌΠ±Π΄Ρ ΠΈ ΡΡΡΠΈΠΌΡ, Π° ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡΠΈΠ΅ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π±ΡΠ°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. Π Ρ Java 9 ΡΠΈΡΡΠ°ΡΠΈΡ Π΄ΡΡΠ³Π°Ρ. ΠΠ°Π»ΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΅Ρ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π΄ΠΎΠ»Π³ΠΎ ΠΆΠ΄Π°ΡΡ, ΡΠ°ΠΊ Π΅ΡΡ ΠΈ Π³Π»Π°Π²Π½Π°Ρ ΡΠΈΡΠ° Π² Π²ΠΈΠ΄Π΅ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ β ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΡΠ°ΠΊΠ°Ρ, ΠΊΠ°ΠΊ Π»ΡΠΌΠ±Π΄Ρ ΠΈ ΡΡΡΠΈΠΌΡ. ΠΠ½Π° Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ½Π° Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ β Π² ΠΎΠ±ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠΈΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΊΡΠ΄Π° Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠΎΡΡΠΎΠΌΡ ΠΌΠ΅Π½Ρ Π½Π΅ ΡΠ΄ΠΈΠ²Π»ΡΠ΅Ρ, ΡΡΠΎ Π»ΡΠ΄ΠΈ Π½Π΅ ΠΏΡΡΠ³Π°ΡΡ Π½Π° Java 9 ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ»ΠΈ Π½Π° Java 8. ΠΡ ΠΈ Π΅ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Oracle ΡΠ΅ΡΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π³ΡΠ°ΡΠΈΠΊ Π²ΡΡ ΠΎΠ΄Π° Π²Π΅ΡΡΠΈΠΉ Π½Π° ΠΏΠΎΠ»ΡΠ³ΠΎΠ΄ΠΎΠ²ΠΎΠΉ, ΡΠ°ΠΊ ΡΡΠΎ Java 9 ΡΠΆΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΌΠ΅Π½Π΅Π½Π° Java 10. ΠΠΎΠΌΡΡΠ½ΠΈΡΠΈ Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΡΡΡ ΡΡΡ Π½ΠΎΠ²ΡΡ ΡΡ Π΅ΠΌΡ, ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΠΈ Π»ΡΠ΄ΡΠΌ Π½Π°Π΄ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎ Π²ΡΠ΅ΠΌ ΡΡΠΈΠΌ Π±ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠΆΠ΅ Π² ΡΠ΅Π½ΡΡΠ±ΡΠ΅ Java 11 Π²ΡΠΉΠ΄Π΅Ρ. ΠΠΎ-ΠΌΠΎΠ΅ΠΌΡ, ΠΈΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ Π»ΡΠ΄ΠΈ ΠΏΠΎΠΊΠ° ΡΡΠΎ Π·Π°Π½ΡΠ»ΠΈ Π²ΡΠΆΠΈΠ΄Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ.
Π ΡΡΠΎ ΠΏΠ΅ΡΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Java 8 ΠΈ 9 Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ΅ β ΠΈ ΠΈΠ·-Π·Π° ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΈ ΠΈΠ·-Π·Π° ΠΊΡΡΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΡ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈΠ·. ΠΡΠ»ΠΈ Π²Ρ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ Ρ Π½ΠΈΠΌ, ΠΏΠΎ-ΠΌΠΎΠ΅ΠΌΡ, Π²Ρ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΠ΅ ΡΠ΅Π±Π΅ ΠΌΠ΅Π΄Π²Π΅ΠΆΡΡ ΡΡΠ»ΡΠ³Ρ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅-ΡΠ°ΠΊΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π½Π° Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ β Π±ΡΠ΄Ρ ΡΠΎ Ρ ΠΎΡΡ 9, Ρ ΠΎΡΡ 10, Ρ ΠΎΡΡ 11 β Π²Ρ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΡΡΠΎΠ»ΠΊΠ½ΡΡΠ΅ΡΡ Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΡΠΆΠ΅ ΡΠ΅ΠΉΡΠ°Ρ.
β Π₯ΠΎΡΠΎΡΠ΅Π΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. Π ΡΠ»ΠΎΠ²Π°ΠΌ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π»ΡΠΌΠ±Π΄Ρ ΠΈ ΡΡΡΠΈΠΌΡ ΠΌΠ°Π½ΠΈΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²: Π° Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π² ΡΡΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ Π³Π»Π°Π²Π½Π°Ρ Π²ΡΠ³ΠΎΠ΄Π°? ΠΠ½Π° ΡΠ²Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ Π²ΡΡ ΠΌΠ΅Π½ΡΡΠ΅, Π½ΠΎ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΡΠ°ΠΊ Π²Π°ΠΆΠ½ΠΎ?
β ΠΡ, Ρ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ Π² Π½Π΅ΠΉ Β«Π΄Π΅Π»Π°ΡΡ Π²ΡΡ ΠΌΠ΅Π½ΡΡΠ΅Β», Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ β Π΄Π΅Π»Π°ΡΡ Π²ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΌ. ΠΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΡ β ΡΡΠΎ, ΠΏΠΎ ΡΡΡΠΈ, Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠΎΠΈΡ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ. ΠΠ±ΡΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΡΡΠ°ΡΡΡΡ Ρ ΡΠΈΡΡΠΎΠ³ΠΎ Π»ΠΈΡΡΠ°, ΠΏΠΎΠ½Π°ΡΠ°Π»Ρ Π²ΡΡ Ρ ΠΎΡΠΎΡΠΎ ΠΈ ΡΠΈΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΠΎΠ΄Π½Π° Π·Π° Π΄ΡΡΠ³ΠΎΠΉ, Π½ΠΎ ΡΠ΅ΡΠ΅Π· ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΏΠΈΡΠ°Π΅ΡΡΡΡ Π² ΡΡΠ΅Π½Ρ. ΠΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΅ΡΠ΅Π· Π³ΠΎΠ΄, ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· Π΄Π²Π°, ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡΡΠ΅, Π½ΠΎ Π½Π°ΡΡΠ°ΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π΅Ρ Π²ΡΡ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΈ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΡΠΈ Π±Π΅Π· ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π³Π΄Π΅-ΡΠΎ ΡΡΠΎ-ΡΠΎ ΡΠ»ΠΎΠΌΠ°Π»ΠΎΡΡ. Π Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·ΠΎΠ²Π°ΡΡ Π΅Ρ ΡΠΆΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈ ΡΠ°Π½ΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ. ΠΡΠΈ ΠΈΡ Π³ΡΠ°ΠΌΠΎΡΠ½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈ ΠΏΡΠΈ ΠΎΡΠΎΠ·Π½Π°Π½ΠΈΠΈ ΡΡΠΎΡΡΠΈΡ Π·Π° Π½ΠΈΠΌΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ. ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π΅ΡΡΡ Β«ΡΠΎΠ΄Π½Π°ΡΒ» ΠΌΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠ°Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, Π° ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ ΡΡΡ Π²Π°ΠΆΠ½Π°. ΠΡΠ»ΠΈ Π·Π°Π΄ΡΠΌΠ°ΡΡΡΡ ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΠΈ β ΠΎΠ½Π° ΠΎ ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΡΡΠ°ΡΡ Π²Π΅ΡΠΈ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΡΡΠ΅ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΡΠ΅ Π½Π°ΡΡΠΆΡ ΡΠΎΠ»ΡΠΊΠΎ API, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Β«Π²Π½ΡΡΡΠ΅Π½Π½ΠΎΡΡΠΈΒ» Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΅ΡΡΡ ΡΠ²Π½ΠΎ ΠΏΡΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΎΠ½ΠΈ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠΎΠΎΠ±ΡΠ°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΠΌ Π½ΡΠΆΠ½Ρ, ΠΈ ΡΡΠΎ Π·Π½Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ΡΡΠ»ΠΈΠ½Π³ΠΎΠΌ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΈΠ»ΠΈ ΡΠ°Π½ΡΠ°ΠΉΠΌΠΎΠΌ β ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΡ Π½Π° ΠΌΠ΅ΡΡΠ΅.
Π ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π³ Π²ΠΏΠ΅ΡΡΠ΄ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΡΠΈΠ²ΡΡΠ½ΡΠΌ classpath. Π£ JAR-ΡΠ°ΠΉΠ»ΠΎΠ² Π² classpath Π½Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ , ΡΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΡΡΠΈΡΡ Π½ΡΠΆΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΠΈ ΡΡΠΎ Π΄Π°ΡΡ ΠΎ ΡΠ΅Π±Π΅ Π·Π½Π°ΡΡ ΡΠΆΠ΅ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅. Π ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π»ΡΠ±ΠΎΠΉ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π² JAR-ΡΠ°ΠΉΠ»Π΅ Π²ΠΈΠ΄Π΅Π½ Π»ΡΠ±ΠΎΠΌΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ Π² classpath. Π’Π°ΠΊ ΡΡΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΡΠΈΠ²Π½ΠΎΡΠΈΡ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ, ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΈ Π½Π°Π΄ΡΠΆΠ½ΡΠΉ ΡΠΎΡΡ.
β ΠΠΎ ΡΠΎ, ΠΎ ΡΡΠΌ Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, Π·Π²ΡΡΠΈΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌ Π΄Π»Ρ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². Π Π΅ΡΠ»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π½Π°Ρ Π½Π° Β«Π²ΠΎΡΡΠΌΡΡΠΊΠ΅Β» ΡΠΈΡΡΠ΅ΠΌΠ°, ΡΠΎ Π²ΡΠ³ΠΎΠ΄Π° ΠΎΡ Π΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° Β«Π΄Π΅Π²ΡΡΠΊΡΒ» Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π°. Π§ΡΠΎ ΠΌΠΎΠ³Ρ Π²ΡΠΈΠ³ΡΠ°ΡΡ? ΠΡΠ΄Π΅Ρ Π»ΠΈ Π±ΡΡΡΡΠ΅Π΅ Π·Π°ΠΏΡΡΠΊ? ΠΡΠ΄Π΅Ρ Π»ΠΈ ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΡ Π°ΡΠ°ΠΊΠΈ, ΡΠ°Π· ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π²Π΅ΡΠΈ Π²ΡΠΎΠ΄Π΅ CORBA?
β ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π½ΠΎΠ²ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ, Π° ΠΌΠΈΠ³ΡΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΡΡ ΠΊΠΎΠ΄ΠΎΠ²ΡΡ Π±Π°Π·Ρ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π°ΡΠ°ΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΠΎ Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠΌ Π½Π° Java 9 Π΄Π°ΠΆΠ΅ Π±Π΅Π· ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ°Π» G1GC, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ, ΠΈ Π΅ΡΡΡ Compact Strings β Π΅ΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ASCII-ΡΡΡΠΎΠΊ, ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ°Π·Π½ΠΈΡΡ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΠ»ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΠΌ JDK ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·ΠΎΠ²Π°Π½, ΠΈ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ Π²Ρ ΠΎΠ΄ΠΈΠ²ΡΠΈΠ΅ Π² ΡΠΎΡΡΠ°Π² JDK Π²Π΅ΡΠΈ Π²ΡΠΎΠ΄Π΅ CORBA ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΡΠ°ΡΡΡ deprecated ΠΈ deprecated for removal (Β«Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ Β»), Π° ΠΊΠΎΠ΅-ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΎ (Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π·Π° Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ). ΠΠΎ ΡΡΡ Π΅ΡΡΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΡΠΎΡΠΎΠ½Π°: Π΅ΡΠ»ΠΈ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΡΡΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ, ΡΠΎ Ρ Π²Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
β ΠΡΠΎ Β«Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΎΒ» β ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ Oracle ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠ΅ΡΠΈΠ»ΠΈΡΡ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π°Π»ΡΡΡ?
β ΠΡΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠΌΠ½Ρ, ΡΠ΄Π°Π»ΠΈΠ»ΠΈ ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ PropertyChangeListener. Π ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ β ΡΠ°ΡΡΡ JavaBeans, Π° JavaBeans ΠΏΠΎΠΏΠ°Π»ΠΈ Π² ΠΌΠΎΠ΄ΡΠ»Ρ java.desktop. Π§ΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ°Π½Π½ΠΎ, Π½ΠΎ ΡΡΠΎ Π»Π΅Π³Π°ΡΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π½Π°ΠΌ ΠΆΠΈΡΡ. Π ΠΏΡΠΈ ΡΡΠΎΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ java.util.logging.LogManager Π±ΡΠ» ΠΌΠ΅ΡΠΎΠ΄ AddPropertyChangeListener. Π§ΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π²ΡΡ Π² classpath β ΠΊΠΎΠΌΡ ΠΊΠ°ΠΊΠΎΠ΅ Π΄Π΅Π»ΠΎ. ΠΠΎ Π²ΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ Π±ΡΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΌ, ΠΊΠΎΠ³Π΄Π° Ρ LogManager Π² JDK Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ Π΄Π΅ΡΠΊΡΠΎΠΏΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ: ΠΎΠ½ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈ ΠΏΠΎΡΠ²ΡΡΡΠ½ Π²Π΅ΡΠ°ΠΌ Π²ΡΠΎΠ΄Π΅ AWT ΠΈ Swing. Π’Π°ΠΊ ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ΡΠΈΠ»Π° ΡΠ΄Π°Π»ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΡΠ΅ΠΉΠ΄-ΠΎΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ. Π Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ Π·Π°ΠΊΠΎΠ²ΡΡΠΈΡΡΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΈ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΊΠΈΠ΄ΡΠ²Π°ΡΡ Π²ΡΡ Π² classpath. ΠΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π½Π°Π·Π²Π°ΡΡ Ρ ΠΎΡΠΎΡΠΈΠΌ Π΄ΠΈΠ·Π°ΠΉΠ½ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π΄Π΅ΡΠΊΡΠΎΠΏΠ½ΠΎΠ³ΠΎ API? Π’Π°ΠΊΠΈΠΌΠΈ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌΠΈ ΡΡΠΎΠΈΡ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ, Π²ΠΎΡ ΠΎΠ½ΠΈ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Java 9 ΠΈ Π·Π°Π΄Π°Π»ΠΈΡΡ. ΠΡΠΌΠ°Ρ, ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ Ρ Π»ΡΠ΄Π΅ΠΉ Π²ΡΠΏΠ»ΡΠ²ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΊΠΈΡ ΡΠΊΡΡΡΠ½ΡΡ ΠΈ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ Π½ΡΠΆΠ½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΡΠΊΠ°Π·ΡΠ²Π°Ρ Π½Π° Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠ΅ ΠΌΠ΅ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅-ΡΠΎ ΡΡΠΎΠΈΡ ΡΠ°ΡΠΏΡΡΠ°ΡΡ.
β Π§ΡΠΎ Π²Ρ ΡΠ΅ΠΉΡΠ°Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅: ΠΊΠΎΠ³Π΄Π° Π»ΡΠ΄ΠΈ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΡΡ Ρ Java 8 Π½Π° 9, ΠΎΠ½ΠΈ ΠΎΡΡΠ°ΡΡΡΡ Ρ classpath, ΠΈΠ»ΠΈ ΠΈΠ΄ΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅?
β Π― Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π²ΠΈΠΆΡ ΠΎΡΡΠ°ΡΡΠΈΡ ΡΡ Ρ classpath. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎ Π»ΡΠ΄ΡΠΌ, ΠΎΠ½ΠΈ ΡΡΠΎ Π·Π½Π°ΡΡ, ΠΈ Π΄Π°ΠΆΠ΅ Ρ ΡΡΠΈΠΌ Ρ Π½ΠΈΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Java 8, ΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ Π½Π° 9 Π΄Π°ΠΆΠ΅ Π±Π΅Π· ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π±ΡΠ΄ΡΡΠ΅ Π³ΠΎΡΠΎΠ²Ρ ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π²Π°Ρ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ API ΠΈΠ· JDK, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°Π½Ρ. ΠΠΎΠΏΡΠΎΡΡ Π΅ΡΡΡ, Π½ΠΎ ΠΎΠ½ΠΈ ΡΠ΅ΡΠ°Π΅ΠΌΡΠ΅.
ΠΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΡΡΠ» Π½Π° Java 9 Ρ classpath, ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Β«ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π»ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈΒ». ΠΠ΅Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌ ΡΡΠ°Π·Ρ ΠΎΡΠ²Π΅ΡΠ° Π½Π° ΡΡΠΎ. ΠΡΠ»ΠΈ Π²Π°ΡΠ° ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π° ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Java-ΠΌΠΎΠ΄ΡΠ»ΠΈ Π²Π°ΠΌ Π±ΡΠ΄Π΅Ρ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΈ Π²ΡΠ³ΠΎΠ΄Π½ΠΎ. ΠΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΠΎΠ΄ΠΈΠ½ Π±ΠΎΠ»ΡΡΠΎΠΉ JAR ΡΠΎ ΡΠΏΠ°Π³Π΅ΡΡΠΈ-ΠΊΠΎΠ΄ΠΎΠΌ, ΡΠΎ Π²Π°ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΏΡΠΎΡΡΠΎ. ΠΠΎΠ΄ΡΠ»ΠΈ β ΡΡΠΎ Π½Π΅ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ·ΡΠΊΠΎΠ²Π°Ρ ΡΠΈΡΠ°, Π³Π΄Π΅ ΠΏΡΠΎΡΡΠΎ Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»ΠΎΠ². ΠΡΠΎ ΡΠ»ΠΎΠΆΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΠΎΠ΄Π΄Π°ΡΡΠΈΠ΅ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΠ°ΡΡΠΈ. Π Π½ΠΈΠΊΠ°ΠΊΠ°Ρ ΡΠΈΡΠ° Π·Π° Π²Π°Ρ ΡΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π΅ ΠΏΡΠΎΠ΄Π΅Π»Π°Π΅Ρ. Π ΠΎΠ±ΡΠ΅ΠΌ, ΡΡΡ Π½Π°Π΄ΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠΎ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΈ ΡΠ΅ΡΠ°ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
β ΠΠΌΠ΅ΡΡΠ΅ Ρ Java 9 ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π΅ΡΡ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ jlink β ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎ Π½ΡΠΌ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ?
β ΠΠ°, ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ²ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΈΠ· JDK 9, ΠΈ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΊΠ»ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π‘ΠΈΡΡΠ°ΡΠΈΡ ΡΠ°ΠΊΠ°Ρ: Ρ jlink ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ ΡΠ²ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΊΠ°Π·Π°ΡΡ Π΅Π³ΠΎ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈ ΡΠΊΠ°Π·Π°ΡΡ jlink ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ°Π· ΡΠ°Π½ΡΠ°ΠΉΠΌΠ° ΠΏΠΎΠ΄ Π²Π°Ρ. ΠΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΊΠ°ΡΡΠΎΠΌΠ½Π°Ρ JRE β ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π°ΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΠ· JDK, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π²Π°ΡΠ΅ΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ , Π½Π° ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°Ρ ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π²Π·ΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄Π΅ΡΠΊΡΠΎΠΏΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ java.desktop, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π²ΡΡΠΊΠΎΠ³ΠΎ Π½Π΅Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΡ Π²ΡΠΎΠ΄Π΅ CORBA ΡΠ°ΠΌ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΡΠ»ΠΈ Π²Π·ΡΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΉ Java-ΠΊΠ»Π°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ java.base (ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ JDK), ΡΠΎΠ³Π΄Π° Π²Π΅ΡΡ ΠΎΠ±ΡΠ°Π· ΡΠ°Π½ΡΠ°ΠΉΠΌΠ° ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΎΠΊΠΎΠ»ΠΎ 20 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ β ΡΠΎ Π΅ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠ°ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ JDK ΡΠ΅Π»ΠΈΠΊΠΎΠΌ. Π Π΅ΡΡ Π² ΡΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΠΊΡΡ Π²ΡΠ΅Ρ Π²Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ², ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΏΠ°ΡΡΠΈΡΡ ΠΈΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅.
β ΠΡΡ ΠΎΠ΄ Jigsaw Π² ΡΠ²ΠΎΡ Π²ΡΠ΅ΠΌΡ ΠΎΠΊΠ°Π·Π°Π»ΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ ΠΎΡΡΠ°ΡΡΠΈ ΠΈΠ·-Π·Π° Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Π²ΡΠΎΠ΄Π΅ OSGi ΠΈ JBoss Modules. Π§ΡΠΎ Ρ ΡΡΠΈΠΌ ΡΠ΅ΠΏΠ΅ΡΡ?
β ΠΠ° Java 9 ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ OSGi-ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ classpath, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ JBoss. ΠΠΎ Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠΉΡΠΈ Π΄Π°Π»ΡΡΠ΅, Π΅ΡΠ»ΠΈ Π·Π°Π΄ΡΠΌΡΠ²Π°Π΅ΡΡΡΡ ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ OSGi ΠΈ Java-ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ β Π½Ρ, Π±ΡΠ»ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ OSGi Alliance, Π½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½Π°. ΠΠΎΠΊΠ° ΡΡΠΎ Ρ Jigsaw ΠΈ OSGi Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΎΠΏΠ°. ΠΠ½ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠΎΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ΅ΡΠ΅.
Π’Π°ΠΊ ΡΡΠΎ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ OSGi-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΡΡΠ΄ Π»ΠΈ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΡ Π΅Π³ΠΎ Π½Π° Java-ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΏΡΠΎΡΡΠΎ Π±ΡΠ΄Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ classpath. Π Π΅ΡΠ»ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ Ρ Π½ΡΠ»Ρ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΡΠ±ΠΎΡ. Π§ΡΠΎ ΡΡΠΎΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅ΡΡΡ, Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ. ΠΡΠ»ΠΈ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠ΅Π³ΠΎ-ΡΠΎ ΡΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ Π½Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Java-ΠΌΠΎΠ΄ΡΠ»ΠΈ. ΠΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Ρ ΠΎΡΠ΅ΡΡ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ OSGi, ΡΠ°ΠΌ Π΅ΡΡΡ Π²Π΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΏΡΠΎΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²Π΅ΡΡ Java-ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. (ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ JUG.ru: Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π²ΡΠ±ΠΎΡΠΎΠΌ ΠΈΠ· Jigsaw ΠΈ OSGi, Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄Π΅ΠΎΠ·Π°ΠΏΠΈΡΡ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΠΈΠΊΠΈΡΡ ΠΠΈΠΏΡΠΊΠΎΠ³ΠΎ)
β Π§Π΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, ΡΠΆΠ΅ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ Β«Π΄Π΅Π²ΡΡΠΊΠΈΒ»?
β Π Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, Π½Π΅Ρ ΠΎΡΠΊΡΡΡΡΡ JEP, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ. ΠΡΠΎ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π½ΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΊΠΎΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ. ΠΠΎ ΡΠ΅Π³ΠΎ Ρ Π»ΠΈΡΠ½ΠΎ ΠΆΠ΄Ρ ΠΎΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠ°ΠΊ ΡΡΠΎ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π‘Π΅ΠΉΡΠ°Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΠΈΠ»ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ. Π Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΡΠΎ Π·Π²ΡΡΠΈΡ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΡΡΠΈΠΌ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ. ΠΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π½Π°Π΄ Jigsaw ΡΡΠΎ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠΈΠ»ΠΈ Β«out of scopeΒ». Π£ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ Π²ΡΠΎΠ΄Π΅ Maven ΠΈ Gradle, Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π²ΡΠΎΠ΄Π΅ OSGi, ΠΈ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ, Π½ΠΎ Ρ Π²ΡΠ΅Ρ ΡΠ°Π·Π½Π°Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°, ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΡΠΎΡΡΠΎ Π±ΡΠ°ΡΡ ΠΈ ΡΡΠ°Π·Ρ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΡΠ°ΠΊΠΎΠ΅ Π² JDK ΠΈ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ·ΡΠΊΠ° Π½Π΅ Π·Π°Ρ ΠΎΡΠ΅Π»ΠΈ, ΠΈ Ρ ΠΌΠΎΠ³Ρ ΡΡΠΎ ΠΏΠΎΠ½ΡΡΡ. ΠΠΎ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΡ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΈΠ΄ΡΡ ΡΡΠΊΠ° ΠΎΠ± ΡΡΠΊΡ, ΠΈ Ρ Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΡΠ°Π½Π΅Ρ ΡΠ°ΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π² Java.
ΠΠΎΡΠ»ΡΡΠ°ΡΡ Π²ΡΠΏΡΡΠΊ ΠΏΠΎΠ΄ΠΊΠ°ΡΡΠ° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° SoundCloud, Π° ΡΠ²ΠΈΠ΄Π΅ΡΡ Π΄ΠΎΠΊΠ»Π°Π΄ Π‘Π°Π½Π΄Π΅ΡΠ° ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΡ β 7 Π°ΠΏΡΠ΅Π»Ρ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ JPoint.
ΠΠ΅ΡΠ²ΡΠ΅ ΡΠ°Π³ΠΈ Ρ Java 9 ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Jigsaw β ΡΠ°ΡΡΡ Π²ΡΠΎΡΠ°Ρ
ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉΡΠ΅, Π₯Π°Π±Ρ.
ΠΠΎΡΠ»Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅Π΄Π»Π΅Π½ΠΈΡ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ Π²ΡΠΎΡΡΡ ΡΠ°ΡΡΡ ΡΡΠ°ΡΡΠΈ ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Jigsaw ΠΈ Java 9, Π²ΡΡΠ΅Π΄ΡΡΡ Π² Π±Π»ΠΎΠ³Π΅ Codecentric. ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π·Π΄Π΅ΡΡ.
ΠΡΠΎ Π²ΡΠΎΡΠ°Ρ ΡΠ°ΡΡΡ ΡΡΠ°ΡΡΠΈ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ Ρ ΠΎΡΠ΅Ρ ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Jigsaw. Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΌΡ ΠΊΡΠ°ΡΠΊΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΠ»ΠΈ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈ ΠΊΠ°ΠΊ Π±ΡΠ»Π° ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ ΡΡΠ΅Π΄Π° Java Runtime. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΏΠΎΡΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ:
- ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²Π²Π΅ΡΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠΌΠΎΠ³ΡΡ ΡΠΈΡΠ°ΡΡ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ?
- Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π² ΠΏΡΡΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ?
- ΠΠ°ΠΊ Jigsaw Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Π½Π΅ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ?
- ΠΠ°ΠΊ ΡΠΎΠ±ΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π· ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉ ΡΡΠ΅Π΄Ρ Java?
ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π·Π° ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΡΠ°ΡΡΠΈ 1 ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌ. ΠΠΎΠ΄ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π·Π΄Π΅ΡΡ.
ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ°Π²Π° Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ
Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Java Π² ΡΠ°ΠΌΠΊΠ°Ρ
Jigsaw. ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΎΠ²Π½Π΅ΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΡΠΏΠΎΠΌΡΠ½ΡΡ, Π½ΠΎ Π½Π΅ ΡΠ°Π·ΡΡΡΠ½Π΅Π½ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΡΠ°ΠΊΠΎΠ²: βΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΡΠ΅Ρ
, ΡΡΠΎ ΡΠΈΡΠ°ΡΡ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρβ. Π’Π°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΊΡΡΠ³ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠΈΡΠ°ΡΡ Π½Π°ΡΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ de.codecentric.zipvalidator
ΡΠ΅ΡΠΏΠ΅ΡΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² de.codecentric.nastymodule
, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ²ΠΎΠΉ module-info.java
Π²ΠΎΡ ΡΠ°ΠΊ:
module de.codecentric.zipvalidator{
exports de.codecentric.zipvalidator.api
to de.codecentric.addresschecker;
}
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π»ΠΈΡΡ addresschecker
ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ API zipvalidator
. ΠΠ°Π½Π½ΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ Π½ΠΈΡΡΠΎ Π²Π°ΠΌ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ Π΄Π»Ρ ΠΎΠ΄Π½ΠΈΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ² ΠΏΠΎΠ»Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
. Π’Π°ΠΊΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° ΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Β«ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΊΡΠΏΠΎΡΡΒ». ΠΡΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ de.codecentric.nastymodule
ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π»ΡΠ±ΠΎΠΌΡ ΡΠΈΠΏΡ ΠΈΠ· de.codecentric.zipvalidator.api
, ΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
./de.cc.nastymodule/de/cc/nastymodule/internal/AddressCheckerImpl.java:4:
error: ZipCodeValidatorFactory is not visible
because package de.cc.zipvalidator.api is not visible
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΡΡΠ³Π°Π΅ΡΡΡ Π½Π° module-info.java
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ zipvalidator
Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΌΠΎΠ³ Π±Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ Π² nastymodule
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΊΡΠΏΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·ΠΎΠ²Π°ΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ Π½Π΅ Ρ
ΠΎΡΠΈΡΠ΅ Π΄Π΅Π»ΠΈΡΡΡΡ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ.
ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
Π§Π°ΡΡΠΎ ΡΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎ ΡΠ΅ΡΠ΅Π· ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ β ΡΠΎ Π΅ΡΡΡ, ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ Π΄Π²Π°ΠΆΠ΄Ρ ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΏΡΡΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ. Π‘ΡΠ°Π·Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Π½Π° ΡΠΌ Π΄Π²Π° ΡΡΠ΅Π½Π°ΡΠΈΡ:
- ΠΠΎΠ΄ΡΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ jar, Π½ΠΎ ΠΈΠΌΡ Ρ Π½ΠΈΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅
- Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°Π·Π½ΠΎΠΈΠΌΠ΅Π½Π½ΡΠΌΠΈ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΡΡΠ΅Π½Π°ΡΠΈΡ. Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π»ΠΈ zipvalidator
:
two-modules-multiple-versions
βββ de.codecentric.addresschecker
β βββ de
β β βββ codecentric
β β βββ addresschecker
β β βββ api
β β β βββ AddressChecker.java
β β β βββ Run.java
β β βββ internal
β β βββ AddressCheckerImpl.java
β βββ module-info.java
βββ de.codecentric.zipvalidator.v1
β βββ de
β β βββ codecentric
β β βββ zipvalidator
β β βββ api
β β β βββ ZipCodeValidator.java
β β β βββ ZipCodeValidatorFactory.java
β β βββ internal
β β β βββ ZipCodeValidatorImpl.java
β β βββ model
β βββ module-info.java
βββ de.codecentric.zipvalidator.v2
β βββ de
β β βββ codecentric
β β βββ zipvalidator
β β βββ api
β β β βββ ZipCodeValidator.java
β β β βββ ZipCodeValidatorFactory.java
β β βββ internal
β β β βββ ZipCodeValidatorImpl.java
β β βββ model
β βββ module-info.java
ΠΡΠ±Π»ΠΈΡΡΡΡΠΈΠ΅ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°Π·Π½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ , Π½ΠΎ ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ. ΠΠ°ΠΊ Jigsaw ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° ΡΡΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ?
./de.codecentric.zipvalidator.v2/module-info.java:1:
error: duplicate module: de.codecentric.zipvalidator
ΠΡΠ°ΠΊ, Π·Π΄Π΅ΡΡ Π½Π°ΠΌ Π»Π΅Π³ΠΊΠΎ Π½Π΅ ΠΎΡΠ΄Π΅Π»Π°ΡΡΡΡ. Jigsaw Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡΡΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π΄Π²Π° ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ.
Π§ΡΠΎ Π½Π°ΡΡΠ΅Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ? Π‘ΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΡΠ΅ΠΆΠ½Π΅ΠΉ, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ±Π° zipvalidatorβΠ° ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° (de.codecentric.zipvalidator.v{1|2}
), ΠΈ addresschecker ΡΠΈΡΠ°Π΅Ρ ΠΎΠ±Π° ΡΡΠΈΡ
ΠΈΠΌΠ΅Π½ΠΈ.
module de.codecentric.addresschecker{
exports de.codecentric.addresschecker.api;
requires de.codecentric.zipvalidator.v1;
requires de.codecentric.zipvalidator.v2;
}
Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΈ Π·Π΄Π΅ΡΡ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ? Π§ΠΈΡΠ°ΡΡ Π΄Π²Π° ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΡΡΠΈΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ? ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ. Π― ΡΠ°ΠΌ ΡΠ΄ΠΈΠ²ΠΈΠ»ΡΡ: ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π»ΠΈΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ:
./de.cc.zipvalidator.v1/de/codecentric/zipvalidator/api/ZipCodeValidator.java:1:
warning: package exists in another module: de.codecentric.zipvalidator.v2
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Ρ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡΡ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠΎ Jigsaw ΡΠ²Π½ΠΎ Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΠ²ΠΈΠ΄ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
java.lang.module.ResolutionException:
Modules de.codecentric.zipvalidator.v2 and de.codecentric.zipvalidator.v1 export
package de.codecentric.zipvalidator.api to module de.codecentric.addresschecker
ΠΠ½Π΅ ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ°Π»ΠΎΠΏΠΎΠ½ΡΡΠ½ΡΠΌ, ΠΏΠΎ-ΠΌΠΎΠ΅ΠΌΡ, ΠΎΡΠΈΠ±ΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΡΠΎΡΠΌΠΈΡΡ ΠΈ ΠΏΠΎΠ°ΠΊΠΊΡΡΠ°ΡΠ½Π΅Π΅. Π― ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π»ΡΡ Π² ΡΠ°ΡΡΡΠ»ΠΊΠ΅, ΠΏΠΎΡΠ΅ΠΌΡ Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, Π½ΠΎ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ ΠΎΡΠ²Π΅ΡΠ° Π΅ΡΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ».
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π² ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅. ΠΠΎ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π² ΡΠ°ΠΊΠΈΡ Π²Π΅ΡΡΠΌΠ° Π²Π΅ΡΠΎΡΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ Ρ Π½Π΅ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌΠΈ Jar-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ? ΠΠ΄Π΅ΡΡ Π²ΡΡΡΠΏΠ°ΡΡ Π² ΠΈΠ³ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠ°ΡΠ½Π΅ΠΌ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ β ΡΡΠΎ jar-ΡΠ°ΠΉΠ», ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² modulepath. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ Π΅Π³ΠΎ ΡΡΠ΄Π° Π·Π°ΠΏΠΈΡΠ΅ΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° ΡΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²ΠΎΠΏΡΠΎΡΠ° ΠΎΠ± ΡΡΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅:
Π: ΠΠ°ΠΊΠΎΠ²ΠΎ Π΅Π³ΠΎ ΠΈΠΌΡ?
Π: ΡΡΠΎ ΠΈΠΌΡ jar-ΡΠ°ΠΉΠ»Π°. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ Π² ΠΏΡΡΡ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ ΡΠ°ΠΉΠ» guava.jar, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ guava.
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Jar ΠΏΡΡΠΌΠΎ ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Maven, ΡΠ°ΠΊ ΠΊΠ°ΠΊ guava-18.0 Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ Java.
Π: Π§ΡΠΎ ΠΎΠ½ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ?
Π: ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΡΠ²ΠΎΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ. ΠΡΠ°ΠΊ, Π²ΡΠ΅ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π»ΡΠ±ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠΈΡΠ°ΡΡΠ΅ΠΌΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
Π: Π§ΡΠΎ ΠΎΠ½ ΡΡΠ΅Π±ΡΠ΅Ρ?
Π: ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ (*all*) ΠΏΡΠΎΡΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ (Π²ΠΊΠ»ΡΡΠ°Ρ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ, ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡΠΎΠΌ Π½ΠΈΠΆΠ΅). ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎ! ΠΠ· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠΈΠΏΠ°ΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΠΎΠ½ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ com.google.common.base.Strings Π² zipvalidator-Π΅. Π§ΡΠΎΠ±Ρ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ Π΄ΠΎΡΡΡΠΏ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ΅Π±ΡΠΎ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Guava:
module de.codecentric.zipvalidator{
exports de.codecentric.zipvalidator.api;
requires public de.codecentric.zipvalidator.model;
requires guava;
}
ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ°ΠΉΠ» guava.jar Π² ΠΏΡΡΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ (ΠΎΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ../jars):
javac -d . -modulepath ../jars -modulesourcepath . $(find . -name "*.java")
ΠΡΠ΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
(ΠΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠΈΠΌ, Π±ΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ. Π Π°Π±ΠΎΡΠ°Ρ ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ Jigsaw 86, Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ: ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ³Π°Π»Π°ΡΡ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ jdk.management.resource
. Π― ΡΠΏΡΠΎΡΠΈΠ» ΠΎΠ± ΡΡΠΎΠΌ Π² ΡΠ°ΡΡΡΠ»ΠΊΠ΅, ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π·Π΄Π΅ΡΡ.
ΠΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Ρ Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Β«ΡΠ°Π½Π½Π΅ΠΉΒ» ΡΠ±ΠΎΡΠΊΠΎΠΉ (early access build), Π° ΡΠΎΠ±ΠΈΡΠ°Π» JDK ΡΠ°ΠΌ. ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ OSX Mavericks Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΎ ΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΡΠ΅Π΄Π΅, ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ makefile, Π½ΠΎ Π² ΠΈΡΠΎΠ³Π΅ Ρ Π²ΡΠ΅ Π½Π°Π»Π°Π΄ΠΈΠ». ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΡΠ΅Π»ΠΈΠ·Π°ΠΌΠΈ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ ΡΠΆΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ).
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡ Π²Π°Ρ Ρ ΠΏΠ°Π»ΠΎΡΠΊΠΎΠΉ-Π²ΡΡΡΡΠ°Π»ΠΎΡΠΊΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠ° ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π΅ Π½Π° Jigsaw. ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ jdeps
. ΠΠ½ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π²Π°Ρ Π½Π΅ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Π²Π°ΠΌ ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ
.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ guava:
jdeps -s ../jars/guava.jar
ΠΠΌΠ΅Π΅ΠΌ ΡΠ°ΠΊΠΎΠΉ Π²ΡΠ²ΠΎΠ΄:
guava.jar -> java.base
guava.jar -> java.logging
guava.jar -> not found
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ guava ΡΡΠ΅Π±ΡΠ΅Ρ java.base
, java.logging
ΠΈ β¦ βΠ½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎβ?! Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅? ΠΡΠ»ΠΈ ΡΠ±ΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ -s
, ΡΠΎ jdeps
ΡΡ
ΠΎΠ΄ΠΈΡ Ρ ΡΡΠΎΠ²Π½Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΡΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° ΡΠ°Π³ Π²Π½ΠΈΠ·, Π½Π° ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² (ΡΠΏΠΈΡΠΎΠΊ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Ρ guava Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ):
com.google.common.xml (guava.jar)
-> com.google.common.escape guava.jar
-> java.lang
-> javax.annotation not found
ΠΠ΄Π΅ΡΡ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ com.google.common.xml
Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ com.google.common.escape
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π² ΡΠ°ΠΌΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅, java.lang
, ΠΊΠΎΡΠΎΡΡΠΉ Ρ
ΠΎΡΠΎΡΠΎ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½, ΠΈ ΠΎΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ javax.annotation
, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°. ΠΠ΅Π»Π°Π΅ΠΌ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ jar Ρ ΡΠΈΠΏΠ°ΠΌΠΈ JSR-305, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ javax.annotation
(ΠΊΡΡΠ°ΡΠΈ, Ρ Π±Π΅Π· Π½ΠΈΡ
ΠΎΠ±Ρ
ΠΎΠΆΡΡΡ β Π² ΠΌΠΎΠΈΡ
ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
ΠΌΠ½Π΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ ΠΈΠ· ΡΡΠΈΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΈ Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ ΡΡΠ΅Π΄Π° ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π²ΠΎΠ·ΡΠ°ΠΆΠ°ΡΡ).
ΠΠ΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΡΠ°ΠΊ, ΡΡΠΎ ΠΆΠ΅ ΡΠ°ΠΊΠΎΠ΅ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ? ΠΠ½ΠΎΠ²Ρ ΠΎΡΠ²Π΅ΡΠΈΠΌ Π½Π° ΡΡΠΈ Π²ΠΎΠΏΡΠΎΡΠ°:
Π: ΠΠ°ΠΊΠΎΠ³ΠΎ Π΅Π³ΠΎ ΠΈΠΌΡ?
Π: ΠΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ Π΄ΠΎΠ³Π°Π΄Π°Π»ΠΈΡΡ, ΠΈΠΌΠ΅Π½ΠΈ Ρ Π½Π΅Π³ΠΎ Π½Π΅Ρ
Π: Π§ΡΠΎ ΠΎΠ½ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ?
Π: ΠΠ΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΡΠ²ΠΎΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ Π»ΡΠ±ΠΎΠΌΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠΎ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΡΠ°ΡΡ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ β Ρ Π½Π΅Π³ΠΎ Π½Π΅Ρ ΠΈΠΌΠ΅Π½ΠΈ, ΠΈ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅Π³ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΡ! ΠΠΎΠΌΠ°Π½Π΄Π° requires unnamed; Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π: Π§ΡΠΎ ΠΎΠ½ ΡΡΠ΅Π±ΡΠ΅Ρ?
Π: ΠΠ΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΏΡΠΎΡΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ.
ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ· Π»ΡΠ±ΡΡ Π²Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΡΠΎ Π² ΡΠ΅ΠΌ ΠΆΠ΅ ΡΡΡΡ? ΠΠ° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π°Ρ ΡΡΠ°ΡΡΠΉ Π·Π½Π°ΠΊΠΎΠΌΡΠΉ β ΠΏΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ. ΠΡΠ±ΠΎΠΉ ΡΠΈΠΏ, ΡΡΠΈΡΠ°Π½Π½ΡΠΉ ΠΈΠ· ΠΏΡΡΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ (Π° Π½Π΅ ΠΈΠ· ΠΏΡΡΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ), Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ β ΠΈΠ»ΠΈ, ΠΈΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ Π² Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠΈΠΏΠ°ΠΌ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π· ΠΏΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ. Π Java 9 ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΡΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΈ ΠΏΡΡΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ, Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ².
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ zipvalidator, Π½ΠΎ addresschecker ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π½Π΅ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·ΠΎΠ²Π°Π½, Ρ Π½Π΅Π³ΠΎ Π½Π΅Ρ module-info.java
. Π‘ΡΡΡΠΊΡΡΡΠ° Π½Π°ΡΠΈΡ
ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΎΠΉ:
one-module-with-unnamed-ok/
βββ classpath
β βββ de.codecentric.legacy.addresschecker
β βββ de
β βββ codecentric
β βββ legacy
β βββ addresschecker
β βββ api
β β βββ AddressChecker.java
β β βββ Run.java
β βββ internal
β βββ AddressCheckerImpl.java
βββ modulepath
β βββ de.codecentric.zipvalidator
β βββ de
β β βββ codecentric
β β βββ zipvalidator
β β βββ api
β β β βββ ZipCodeValidator.java
β β β βββ ZipCodeValidatorFactory.java
β β βββ internal
β β βββ ZipCodeValidatorImpl.java
β βββ module-info.java
Π’Π΅ΠΏΠ΅ΡΡ Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ classpath, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄, Π·Π°Π²ΡΠ·Π°Π½Π½ΡΠΉ Π½Π° Π΄ΠΎΡΡΡΠΏ ΠΊ zipvalidator, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ modulepath, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ zipvalidator. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ. Π§ΡΠΎΠ±Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄, Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΡΠΎΡΡΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΌ Π΅Π΅ Π² ΠΏΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ:
javac -d classpath/de.codecentric.legacy.addresschecker
-classpath modulepath/de.codecentric.zipvalidator/ $(find classpath -name "*.java")
ΠΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ.
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΠΌΠΈ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π΄Π²Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. Π ΠΈΠΌΠ΅Π½Π½ΠΎ:
- ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΏΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ
- Π‘ΠΌΠ΅ΡΠ°ΡΡ ΠΏΡΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΈ ΠΏΡΡΡ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ
ΠΡΠ±ΠΈΡΠ°Ρ ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΌΡ, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠ΅ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π·Π°ΠΏΠΈΡΠ΅ΠΌ Π² Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΌΠΎΠ³ΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Π΄ΡΡΠ³ ΠΊ Π΄ΡΡΠ³Ρ.
java -cp modulepath/de.cc.zipvalidator/:classpath/de.cc.legacy.addresschecker/
de.codecentric.legacy.addresschecker.api.Run 76185
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊ java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π²Π°ΠΌΠΈ ΡΠ΅Π³ΠΎΠ΄Π½Ρ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠΌΠ΅ΡΠ°Π½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΡΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ ΠΈ ΠΏΡΡΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ:
java -modulepath modulepath -addmods de.codecentric.zipvalidator
-classpath classpath/de.codecentric.legacy.addresschecker/
de.codecentric.legacy.addresschecker.api.Run
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π²Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ: -classpath
ΠΈ -modulepath
. ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ -addmods
β ΠΏΡΠΈ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠΈ ΠΏΡΡΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΈ ΠΏΡΡΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ, ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π»ΡΠ±ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ
modulepath, Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ
Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ.
ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π½ΠΎ Π·Π΄Π΅ΡΡ Π΅ΡΡΡ Π·Π°Π³Π²ΠΎΠ·Π΄ΠΊΠ°! ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΠΎΡΠ²Π΅Ρ Π½Π° Π²ΠΎΠΏΡΠΎΡ βΡΠ΅Π³ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρβ β ΡΡΠΎ βΠ²ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈβ. ΠΡΠ»ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ zipvalidator ΡΠ΅ΡΠ΅Π· modulepath, ΡΠΎ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π»ΠΈΡΡ Ρ Π΅Π³ΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ. ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ IllegalAccessError Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ» ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉ ΡΡΠ΅Π΄Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ jlink
ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ; ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ Π½Π°ΡΠ΅Π³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ. jlink
β ΡΡΠΎ ΡΡΠΈΠ»ΠΈΡΠ° Java 9 Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ² JVM. Π‘Π°ΠΌΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅, ΡΡΠΎ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅ JDK, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Ρ
ΠΎΡΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΡΡΠΎΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²! Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΡΠ»ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ°Π· ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉ ΡΡΠ΅Π΄Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π½Π°Ρ addresschecker, ΡΠΎ Π΄Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
jlink --modulepath $JAVA9_BIN/../../images/jmods/:two-modules-ok/
--addmods de.codecentric.addresschecker --output linkedjdk
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅Π³ΠΎ ΡΡΠΈ Π²Π΅ΡΠΈ:
- ΠΡΡΡ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅, Π½Π°ΡΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ ΠΏΡΡΡ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ jmods Π² Π²Π°ΡΠ΅ΠΌ JDK β Π·Π΄Π΅ΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ java)
- ΠΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² Π²Π°Ρ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²
- ΠΠ°ΡΠ°Π»ΠΎΠ³ Π²ΡΠ²ΠΎΠ΄Π°
ΠΠΎΠΌΠ°Π½Π΄Π° ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ:
linkedjdk/
βββ bin
β βββ java
β βββ keytool
βββ conf
β βββ net.properties
β βββ security
β βββ java.policy
β βββ java.security
βββ lib
βββ classlist
βββ jli
β βββ libjli.dylib
βββ jspawnhelper
βββ jvm.cfg
βββ libjava.dylib
βββ libjimage.dylib
βββ libjsig.diz
βββ libjsig.dylib
βββ libnet.dylib
βββ libnio.dylib
βββ libosxsecurity.dylib
βββ libverify.dylib
βββ libzip.dylib
βββ modules
β βββ bootmodules.jimage
βββ security
β βββ US_export_policy.jar
β βββ blacklisted.certs
β βββ cacerts
β βββ local_policy.jar
βββ server
β βββ Xusage.txt
β βββ libjsig.diz
β βββ libjsig.dylib
β βββ libjvm.diz
β βββ libjvm.dylib
βββ tzdb.dat
ΠΠΎΡ ΠΈ Π²ΡΠ΅. Π OSX Mavericks Π²ΡΠ΅ ΡΡΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 47 MB. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π°ΡΡ ΠΈΠ²Π°ΡΠΈΡ ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π½Π°ΠΌ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅. Π‘Π°ΠΌΡΠΉ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΉ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡ, ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
jlink --modulepath $JAVA9_BIN/../../images/jmods/:two-modules-ok/bin
--addmods de.codecentric.addresschecker --output linkedjdk --exclude-files *.diz
--compress-resources on --strip-java-debug on --compress-resources-level 2
Π Π°Π·ΠΌΠ΅Ρ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π΄ΠΎ 18 MB, ΠΏΠΎ-ΠΌΠΎΠ΅ΠΌΡ β ΠΏΡΠΎΡΡΠΎ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½ΠΎ. Π Linux, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΆΠ°ΡΡΡΡ ΠΈ Π΄ΠΎ 13.
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅
/bin/java --listmods
ΠΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² ΡΡΠΎΠΌ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π΅
de.codecentric.addresschecker
de.codecentric.zipvalidator
[email protected]
ΠΡΠ°ΠΊ, Π²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π·Π°Π²ΠΈΡΡΡΠΈΠ΅ ΠΎΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π΄Π°Π½Π½ΠΎΠΉ JVM. ΠΠΎ ΠΌΠ½Π΅ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Ρ ΠΏΠΎΡΠ΅Π» Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΡΠ΅ΠΌ.
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΌΠΎΠ³ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π²ΡΠΎΡΠΎΠΉ Π²ΡΠ·ΠΎΠ² Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΊ jlink, ΠΈ ΠΏΡΡΡ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ ΡΠ°ΠΌ ΠΈΠ½ΠΎΠΉ, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅. ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΏΡΡΡ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ bin. ΠΡΠΎΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠ΅ jar-ΡΠ°ΠΉΠ»Ρ, ΠΈ jar Π΄Π»Ρ addresschecker ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅. Π£ΡΠΈΠ»ΠΈΡΠ° jlink ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² bin-ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π½Π°ΡΠ΅ΠΉ JVM:
linkedjdk/
βββ bin
β βββ de.codecentric.addresschecker
β βββ java
β βββ keytool
...
ΠΡΠ°ΠΊ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ. ΠΡΠ°ΡΠΎΡΠ°!
./linkedjdk/bin/de.codecentric.addresschecker 76185
Π²ΡΠ²ΠΎΠ΄ΠΈΡ
76185 is a valid zip code
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡ ΠΈ ΠΏΠΎΠ΄ΠΎΡΠ»ΠΎ ΠΊ ΠΊΠΎΠ½ΡΡ Π½Π°ΡΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ Jigsaw. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΡΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡΠΈΡ
, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΡΠ΅Π³ΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Jigsaw ΠΈ Java 9. Jigsaw ΠΏΡΠΈΠ²Π½ΠΎΡΠΈΡ ΠΊΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π»ΡΠ·Ρ ΡΠ°ΠΊ Π·Π°ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² try-with
. ΠΠ΅ΡΡ Π½Π°Ρ ΡΡΠ»ΡΠ΅ΠΉΠ½ ΠΎΡ ΡΠ±ΠΎΡΠΎΡΠ½ΡΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π²ΡΠΎΠ΄Π΅ Maven ΠΈΠ»ΠΈ Gradle Π΄ΠΎ IDE ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ JavaOne Π₯Π°Π½Ρ ΠΠΎΠΊΡΠ΅Ρ ΠΈΠ· Gradle Inc. ΠΏΡΠΎΡΠΈΡΠ°Π» Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π΄Π°ΠΆΠ΅ Π½Π° Java 8 ΠΈ Π½ΠΈΠΆΠ΅. Gradle Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΊΠ°Π·, Π΅ΡΠ»ΠΈ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π°ΡΡΡΠ΅Π½Π°. ΠΡΠ° (ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±ΡΠ»Π° Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ΅Π»ΠΈΠ· Gradle 2.9. ΠΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΆΠ΄ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π°!
ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ Jigsaw Π²Π½ΠΎΠ²Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²Π°ΠΌ Π΄ΠΎΠΌΠ°ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Jigsaw Project, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ»Π°ΠΉΠ΄Ρ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠ² ΠΎ Jigsaw Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ JavaOne.
ΠΠΎΠ΄ΡΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Java. ΠΠ°ΠΊ? / ΠΠ»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΠ½ΡΠΎΡΠΈΡΡΠ΅ΠΌΡ ΠΠΆΠ΅Ρ / Π₯Π°Π±Ρ
Π’ΠΎ, ΡΡΠΎ Π² Java Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ, ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π°Π²Π½ΠΎ, ΠΈ Π±ΡΠ»ΠΎ Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ. ΠΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ Jigsaw. Π 2011 ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ Π² Java 7, Π² 2014 β Π² Java 8, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π±ΡΠ»ΠΎ Π°Π½ΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ, ΡΡΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΈΡΠ»Ρ 2017 Π²ΡΠΉΠ΄Π΅Ρ Java 9 Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎ ΡΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°ΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΠ³Π°?
OSGi ΡΠΏΠ΅ΡΠΈΡ Π½Π° ΠΏΠΎΠΌΠΎΡΡ
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Java ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ OSGi (Open Services Gateway Initiative) β ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ OSGi Alliance). ΠΠ½Π° ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΠ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΡΡΠ΅ΠΌΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ°ΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π΅ΡΡ ΠΎΠ± ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ (ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΡ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ), ΡΠ»Π°Π±ΠΎΠΉ ΡΠ²ΡΠ·Π½ΠΎΡΡΠΈ (ΠΌΠΎΠ΄ΡΠ»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠ³ΠΎΠ²ΠΎΡΠ΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ²) ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎΡΡΠΈ (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠ°ΡΡ Π½Π° Π»Π΅ΡΡ, Π±Π΅Π· ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ). ΠΡΠ½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ OSGi ΡΠ²Π»ΡΡΡΡΡ 2 ΡΡΡΠ½ΠΎΡΡΠΈ: Π½Π°Π±ΠΎΡΡ (Bundles) ΠΈ ΡΠ΅ΡΠ²ΠΈΡΡ (Services).
Bundles
ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΠ Π½Π° Java, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π ΠΌΠΈΡΠ΅ Java-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π² ΡΠ°ΠΉΠ»Ρ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ JAR (Java ARchive) β ΠΎΠ±ΡΠΊΠ½ΠΎΠ²Π΅Π½Π½ΡΠΉ ZIP-Π°ΡΡ ΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Java-ΠΊΠ»Π°ΡΡΡ (ΡΠ°ΠΉΠ»Ρ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .class). ΠΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠΏΡΡΠΆΠ΅Π½ΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ.
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΡΡ-Π»ΠΈΠ±ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π² Π½Π΅ΠΉ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΏΡΡΡΠ°ΡΡ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΡΡ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠΈΡΡ Π΅Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΡΡΠ³Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° β ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ JAR Hell, ΠΎΠ± ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ»ΠΎΠΌΠ°Π»ΠΈ Π½Π΅ΠΌΠ°Π»ΠΎ ΠΊΠΎΠΏΠΈΠΉ. Π‘ΡΡΡ Π΅Π³ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ: ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (ΡΠ°ΠΊΠΎΠ΅ ΡΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΠΎΠ»ΡΡΠΈΠΎΠ½ΠΈΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ), Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠ»Π°ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Java ΠΆΠ΅ ΡΡΡΡΠΎΠ΅Π½Π° ΡΠ°ΠΊ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΠΏΠ΅ΡΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π½Π°ΠΉΠ΄Π΅Ρ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΊΠ»Π°ΡΡΠΎΠ². Π’Π΅ΠΌ ΡΠ°ΠΌΡΠΌ, ΠΎΠ±ΡΠ°ΡΠΈΠ²ΡΠΈΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ-Π»ΠΈΠ±ΠΎ ΠΊΠ»Π°ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²Ρ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΠ΅ΡΡ, Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. Π‘Π²ΡΠ·Π°Π½ΠΎ ΡΡΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Java Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΎ Π²Π΅ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ OSGi Π½Π΅ ΡΡΠ°Π»ΠΈ ΠΌΠ΅Π½ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ JAR-ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΠΈ, Π° ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ΅Π΄ΠΎΠΉ OSGi. ΠΡΠΈΡΠ΅ΠΌ, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΡΠ° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ JAR-ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΎΠ±ΡΡΠ½ΡΡ Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ JAR-ΡΠ°ΠΉΠ» ΡΡΠ°Π» OSGi-Π½Π°Π±ΠΎΡΠΎΠΌ, Π² Π½Π΅Π³ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Export-Package (ΠΏΠ°ΠΊΠ΅ΡΡ ΡΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ°, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²Π½Π΅ Π΅Π³ΠΎ) ΠΈ Import-Package (ΠΏΠ°ΠΊΠ΅ΡΡ Π΄ΡΡΠ³ΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ², ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ°). ΠΡΠΈ ΡΡΠΎΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΊΠ°ΠΊ Π²Π΅ΡΡΠΈΡ API, ΠΊΠΎΡΠΎΡΡΡ Π½Π°Π±ΠΎΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ², ΡΠ°ΠΊ ΠΈ Π²Π΅ΡΡΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²Π΅ΡΡΠΈΠΉ API, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π±ΠΎΡ ΡΡΠ΅Π±ΡΠ΅Ρ Π΄Π»Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΠΎΡ Π½ΠΈΡ ΠΆΠ΅. ΠΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π°Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π΅Π³ΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ, Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²Π½Π΅ Π½Π°Π±ΠΎΡΠ° (Private). Π’Π°ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ OSGi-Π½Π°Π±ΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π°Π±ΠΎΠΉ ΡΠ²ΡΠ·Π½ΠΎΡΡΠΈ.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Java-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠΆΠ΅ OSGi ready, Ρ.Π΅. ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² OSGi-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ Π΅ΡΡΡ Π½Π΅ΠΌΠ°Π»ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΡΠΈΠ»ΠΈΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ OSGi ΠΈΠ· ΠΎΠ±ΡΡΠ½ΡΡ JAR-ΡΠ°ΠΉΠ»ΠΎΠ².
Π ΠΈΡ. 1.
Π OSGi ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ JAR Hell, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΡΡΠΈΠΌΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ, ΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΠΊΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ. ΠΠΎΠΆΠ½ΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΈ Π²ΡΠ³ΡΡΠΆΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ Π½Π°Π±ΠΎΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. OSGi ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΈΡ .
Services
ΠΡΠ°ΠΊ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ OSGi-Π½Π°Π±ΠΎΡΠΎΠ² ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² (API). ΠΠΎ Π³Π΄Π΅ Π²Π·ΡΡΡ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ? ΠΠ°ΡΠΈΠ°Π½Ρ Β«Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² API Π½Π°Π±ΠΎΡΠ°Β» Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ β Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΌΡ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈΡΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π°Π±ΠΎΡΠΎΠ² Π²Π½Π΅ ΡΡΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ². ΠΡΡΠ³ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½ Β«ΡΠ°Π±ΡΠΈΠΊΠ°Β», ΡΠ΅Π°Π»ΠΈΠ·ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ Π² API Π½Π°Π±ΠΎΡΠ°. ΠΠΎ ΠΈ ΠΎΠ½ΠΎ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ΄Π°ΡΠ½ΠΎ, Ρ.ΠΊ. Π΄Π»Ρ ΡΠΎΠΊΡΡΡΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ.
ΠΠΎΠΈΡΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π² OSGi ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π΅ΡΡΡΠ° ΡΠ΅ΡΠ²ΠΈΡΠΎΠ². Π ΡΡΠΎΠΌ ΡΠ΅Π΅ΡΡΡΠ΅ Π½Π°Π±ΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΌ Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ. ΠΠ°Π±ΠΎΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ°, ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ Π² ΡΠ΅Π΅ΡΡΡΠ΅ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π°Π±ΠΎΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π² OSGi-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅. ΠΠ»ΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌΡ Π² ΡΠ΅Π΅ΡΡΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ, Π½Π°Π±ΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ Π² ΡΠ΅Π΅ΡΡΡΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ².
Π ΠΈΡ. 2.
ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ Java Virtual Machine
ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½Π°Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π°Π±ΠΎΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ β ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠ΅ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² (REST, Protocol Buffers, MQ ΠΈ Ρ.Π΄.). ΠΠΎ ΡΠ°ΠΊΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ β ΡΡΠΎ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΠΎΠ΄Π½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΠ:
- Π»Π΅Π³ΠΊΠΎΡΡΡ (ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π»ΠΈΡΡ ΠΎΠ΄Π½Π° ΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ).
- ΠΏΡΠΎΡΡΠΎΡΠ° Π·Π°ΠΌΠ΅Π½Ρ (Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ²ΠΈΡ Π½Π΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Π±Π΅Π· ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΠ).
- ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ).
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ OSGi Π΄Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²ΡΠ΅ΠΌΠΈ ΡΡΠΈΠΌΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Java. ΠΠ°ΠΆΠ΄ΡΠΉ Π½Π°Π±ΠΎΡ Ρ OSGi, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡ Π² ΡΠ΅Π΅ΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ Π²Π½ΡΡΡΠΈ Java Virtual Machine, JVM (Π² ΠΌΠΈΡΠ΅ OSGi ΡΠ°ΠΊΠΈΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Β΅Services).
Red Hat JBoss Fuse
ΠΡ Π² Β«ΠΠΆΠ΅ΡΠ΅Β» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° OSGi ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΠ Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΊΠΎΠΌ-ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΡΡΡΠ°Ρ ΠΎΠ²ΡΡ , ΠΏΡΠΎΡΠ΅ΡΡΠΈΠ½Π³ΠΎΠ²ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Red Hat JBoss Fuse (ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Fuse Fabric). ΠΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π³ΠΈΠ±ΠΊΡΡ OSGi-ΡΡΠ΅Π΄Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π»Π΅Π³ΠΊΠΎΠ΅ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡΠΎΡΡΠΎΡΠ° ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΠ β Π²ΡΠ΅ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² Fuse Fabric. Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Red Hat JBoss Fuse ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΡ Π² ΠΊΠ»Π°ΡΡΠ΅Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ΅ΠΉΡΡ ΡΡΠ΅Π΄ΠΎΠΉ.
Π ΡΠ°ΠΌΠΊΠ°Ρ Fuse Fabric ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ:
Π€ΠΈΡΠΈ (features) β ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡ OSGi-Π½Π°Π±ΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π».
ΠΡΠΎΡΠΈΠ»ΠΈ (profiles) β ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡ ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ Π½Π°Π±ΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ
ΠΎΠ΄ΡΡ Π² ΡΠΈΡΡ.
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ (containers) β ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ JVM-ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ·Π»Π΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Fuse Fabric ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Red Hat JBoss Fuse.
Π ΠΈΡ. 3.
ΠΡΠ±ΠΎΠ΅ ΠΠ Π½Π° Π±Π°Π·Π΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Fuse Fabric ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· OSGi-Π½Π°Π±ΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π³ΡΡΠΏΠΏΠΈΡΡΡΡΡΡ Π² ΡΠΈΡΠΈ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°ΡΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ JVM-ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ·Π»Π°Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΌ.
Π‘ΡΠ΅Π΄Π° Fuse Fabric Π΄Π°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π»Π΅Π³ΠΊΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ. ΠΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΡΠΈΠ»ΠΈ (Π° Π½Π° ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π΅ β ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ), ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ/ΡΠ΄Π°Π»ΡΡΡ/Π·Π°ΠΏΡΡΠΊΠ°ΡΡ/ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π½Π° Π»ΡΠ±ΠΎΠΌ Ρ ΠΎΡΡΠ΅, Π²Ρ ΠΎΠ΄ΡΡΠ΅ΠΌ Π² ΠΊΠ»Π°ΡΡΠ΅Ρ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ·Π»Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ Ρ.Π΄. Π Π²ΡΠ΅ ΡΡΠΎ online β Π±Π΅Π· ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ·Π»ΠΎΠ² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Ρ ΡΠ°Π½ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΡΠΈΠΉ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ, ΡΠΈΡ, OSGi-Π½Π°Π±ΠΎΡΠΎΠ².
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Distributed OSGi, Π² ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ OSGi-Π½Π°Π±ΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠ³ΠΎ, ΡΠ°ΠΊ ΠΈ ΡΠ°Π·Π½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ°Π·Π½ΡΡ Ρ ΠΎΡΡΠΎΠ². ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ (ΠΏΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π·Π°ΡΡΠ°ΡΠ°Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ) ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ OSGi-Π½Π°Π±ΠΎΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ Π² REST/web-ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΠ· Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Fuse Fabric, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΡΠΎΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ, ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ²ΠΎΠΈΡ JVM-ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² (ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π·Π½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΡΠ±ΠΎΡΡΠΈΠΊΠ° ΠΌΡΡΠΎΡΠ°), ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ΅ΡΠ²ΠΈΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎ ΡΠ΅ΡΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°.
Π’.ΠΊ. ΠΏΡΠΎΠ΄ΡΠΊΡ Red Hat JBoss Fuse ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Open Source ΡΡΠ΅ΠΊΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Apache ServiceMix, Π² Π½Π°ΡΠ΅ΠΌ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΌΠΎΡΠ½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠ°ΠΊ Apache ActiveMQ (ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ JMS), Apache Camel (ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ), Apache CXF (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ REST/web-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²), Blueprint (ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ), Spring ΠΈ Ρ.Π΄. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π±Π΅ΡΡΠΎΠ²Π½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ Π² Red Hat JBoss Fuse, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π°.
ΠΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½ ΡΠΊΡΠΏΠ΅ΡΡΠ°ΠΌΠΈ Π¦Π΅Π½ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Β«ΠΠ½ΡΠΎΡΠΈΡΡΠ΅ΠΌΡ ΠΠΆΠ΅ΡΒ».
JAVA 9. Π§ΡΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ? / ΠΠ»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ OTUS. ΠΠ½Π»Π°ΠΉΠ½-ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ / Π₯Π°Π±Ρ
Java β ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ Π½Π°ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠΊΠΎΠ»ΠΎ 6.5 ΠΌΠ»Π½ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Java ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠΈΡΡ. Π Π²ΡΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π΅Π³ΠΎ ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΎΡΡΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ).
Java Π±ΡΠ»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° Π² 1995 Π³ΠΎΠ΄Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Sun Microsystems ΠΈ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π»Π°ΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅Π»Π΅Π²ΠΈΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΡΠΎΠ²ΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ². Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ· Java 1.0 Π²ΡΡΠ²ΠΈΠ» ΡΠΌΠ΅Π½Ρ ΡΠΎΠΊΡΡΠ° Π½Π° ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ² Π΅Π³ΠΎ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ 1.0 ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ ΠΈ Π²ΠΎΡ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΠΏΠΎΡΠ»Π΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΎΠ² 21 ΡΠ΅Π½ΡΡΠ±ΡΡ 2017 Π³ΠΎΠ΄Π° ΡΠΎΡΡΠΎΡΠ»ΡΡ ΡΠ΅Π»ΠΈΠ· Java 9.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ (8-ΠΉ) Π²Π΅ΡΡΠΈΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ ΡΠ΅ΠΊΡΠΎΡΠΎΠ² Π±ΠΈΠ·Π½Π΅ΡΠ°, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΠ½ΡΠ΅Ρ , Π·Π΄ΡΠ°Π²ΠΎΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½Π΄ΡΡΡΡΠΈΠΈ. Π‘ΡΠ΅Π΄ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΡΡ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠΉ Java 8 ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΡΡΠΈΠΌΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² API.
Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Java 9 ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΡΠ΅Ρ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ βΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌβ ΠΈ Π² API. ΠΡΠΎΠΌΠ΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Jigsaw, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π»ΠΎΠΆΠ΅Π½Π° ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΡ ΠΏΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΡΠ½ΠΎΡΡΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Java, Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡ Π²Π°ΡΡΠ°ΡΡΡΡ Π΅ΡΡ ΡΡΠ΅ΠΌΡ Π²Π°ΠΆΠ½ΡΠΌΠΈ ΡΠΈΡΠ°ΠΌΠΈ:
- ΠΠΎΠ»Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° HTTP 2.0: ΠΠΎΠΏΡΠΎΡ Π² ΡΠΊΠΎΡΠΎΡΡΠΈ, ΠΈ HTTP 2.0 ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΊΠΎΠ»Π΅Π±Π»ΡΡΠΈΠ΅ΡΡ ΠΎΡ 11.81% Π΄ΠΎ 47.7% ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ HTTP 1.1.
- Jshell: ΠΠΎΠ²ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Ρ ΠΎΡΠ΅Ρ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ Java, ΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ Π²ΡΠ΅ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ.
- Microbenchmark: Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅ΡΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ. ΠΠ½Π°Π»ΠΈΠ· JMH Π·Π° Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄Ρ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π΄Π»Ρ Java 9.
Π‘ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Π½Π° ΠΏΠΎΡΡΠ°Π»Π΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° Java, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² Π΄Π»Ρ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΡ.
ΠΠ°Π»Π΅Π΅ ΠΌΡ Π±Π»ΠΈΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΡ, ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°Π²ΡΠΈΡ Π² Java 8.
HTTP/2 ΠΊΠ»ΠΈΠ΅Π½Ρ
ΠΡΠΎ, ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΡΠ°ΠΌΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ β HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΊΠ°ΠΊ HTTP/2 ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, ΡΠ°ΠΊ ΠΈ WebSocket. ΠΠ΅Π΄Ρ SPDY ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΡ Google, Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΠ½ΠΎΠ²Π°Π½ HTTP/2 ΡΠΆΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠ»ΡΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π°ΡΠ°Π²Π½Π΅ Ρ Netty ΠΈΠ»ΠΈ Jetty, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° (ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π° Π·Π°ΠΏΡΠΎΡ/ΠΎΡΠ²Π΅Ρ), Π° ΡΠ°ΠΊΠΆΠ΅ Push-ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅ΡΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π±Π΅Π· ΡΠ²Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠΎΠ²ΡΠΉ API ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈΠ½ΠΊΡΠ±Π°ΡΠΎΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ Java β ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΡΠΈΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΌ ΡΠ°Π·Π²ΠΈΡΠΈΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ (ΡΠΎ Π΅ΡΡΡ Java 10), Π»ΠΈΠ±ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½Π°. ΠΠ΅ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡ Π΄Π»Ρ Java, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΎΡΡΡΠ΅Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π½Π°ΡΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠΎΠ΅ΠΊΡ Jigsaw
ΠΡΠΎΠ΅ΠΊΡ Jigsaw (Π² ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅ βΠ³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΠ°β) Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΡΡΠΈΠ·Π°ΡΠΈΡ Java. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠ°ΡΡΠΈ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ, ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΈΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΡ. Π§ΡΠΎ Π²Π΅Π΄Π΅Ρ ΠΊ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈ ΠΎΡΠ»Π°ΠΆΠ΅Π½Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΠ. ΠΡΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ Java 9 ΠΎΡ Java 8.
ΠΡΠΎΡΠΎΠ΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ β Java Platform ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π»Π΅Π³ΡΠ΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΠΉ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π°ΠΆΠ΅ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ Ρ Π½ΠΈΠ·ΠΊΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ (ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ²). ΠΡΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π²Π΅ΡΠ΅ΠΉ (IoT). Π¨Π°Π³ Π²ΠΏΠ΅ΡΠ΅Π΄ Π΄Π»Ρ Java, ΠΈ ΡΠ°Π½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ IoT-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° ΡΡΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
Jshell
Jshell Π΄ΠΎΠ±Π°Π²ΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Java ΠΊ REPL (Read-Eval-Print-Loop). ΠΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π° Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ. ΠΠ½ ΠΎΡΠ½Π°ΡΠ΅Π½ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΈΡΡΠΎΡΠΈΠΈ ΠΈ Π°Π²ΡΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΄ΠΎΠΌ Π΄ΡΡΠ³ΠΈΡ
ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π·Π°Ρ
ΠΎΡΠ΅ΡΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ Java ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π·Π°Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΈΡ
Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄. Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΡΠ΅ΠΊ Ρ Π·Π°ΠΏΡΡΠΎΠΉ β ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π±ΡΡΡ ΠΏΡΠΎ Π½ΠΈΡ
: Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² REPL Π΄Π»Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
IDE ΠΈΠ»ΠΈ Π²Π΅Π±-ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Java REPL, Π½ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ
Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ.
Π£Π½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ JVM
ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΅Π΄ΠΈΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Ρ JVM-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ Java 9, Π²ΠΎΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ . ΠΡΠ·ΠΎΠ²Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² JVM ΠΎΡΡΡΡΡΡΠ²ΡΡΡ, ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Java-ΠΊΠΎΠ΄Π° Π² Java Development Kit
G1 β Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΉ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ°
ΠΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ Π² Java Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ°, Ρ ΠΎΡΡ ΠΏΠΎ ΡΠ°ΠΊΡΡ ΠΈΡ 4. Parallel / Throughput Collector ΡΡΠΈΡΠ°Π»ΡΡ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΌ Π² ΠΏΡΠΎΡΠ»ΡΡ Π²Π΅ΡΡΠΈΡΡ , Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ» G1, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² Java 7 ΠΈ Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π΄Π»Ρ Π»ΡΡΡΠ΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΊΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 4GB. ΠΠ½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ GC ΠΏΠ°ΡΠ·, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π²ΡΠ΅ ΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ, ΡΠΎ Π΄Π»ΡΡΡΡ Π΄ΠΎΠ»ΡΡΠ΅.
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΠΌΡΠ»ΡΡΠΈ-ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ
ΠΡΠΎΡ API ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Π±ΠΎΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² Π΅Π΄ΠΈΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ.
ΠΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ API: Concurrency ΠΈ Stack Walking
Java 9 ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ CompletableFuture ΠΈ java.util.concurrent.Flow. Flow β ΡΡΠΎ Java-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Reactive Streams API. Reactive Streams ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ back-pressure β Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π²ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π±ΡΡΠ΅ΡΠΎΠ² Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ concurrency, CompletableFuture ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ΅ΡΠΈΠ»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π²ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅ Π΅Π³ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π² Java 8. ΠΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ ΠΈ ΡΠ°ΠΉΠΌ-Π°ΡΡΠΎΠ², ΡΠ»ΡΡΡΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
Π’Π°ΠΊΠΆΠ΅ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ ΠΎ Stack Walking API. ΠΡΠ΅ Π²Π΅ΡΠ½ΠΎ, Java 9 ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠ΅ΠΊ-ΡΡΠ΅ΠΉΡΠΎΠ², Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΈΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΡ ΠΈΡ ΠΊ ΠΏΡΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΊΡΡΡ.
Immutable List, Set, Map, ΠΈ Map.Entry API
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Java 8 ΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°. Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ Π²ΡΠ΅ΠΌΡΠ·Π°ΡΡΠ°ΡΠ½ΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² Java 8 Π±ΡΠ» ΡΡΡΡΠ°Π½Π΅Π½. ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΈ ΡΡΠΊΠΎΡΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Java 9
ΠΠ΅ΡΠ°Π»ΠΈ ΠΎΡΠ»ΠΈΡΠΈΠΉ Java 9 ΠΎΡ Java 8 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈ Π΄Π»Ρ Π±ΠΈΠ·Π½Π΅ΡΠ°, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎΡΡ Π² ΠΏΠΎΠΈΡΠΊΠ΅ Π½Π°ΠΈΠ»ΡΡΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΡ Π΄Π΅Π²ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠ»ΡΡΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ:
- Π‘ΠΊΠΎΡΠΎΡΡΡ Π²ΡΡΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° HTTP/2.
- ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΠ΅ΡΡΡΡΠΎΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅ΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π° Π½Π΅ Π²ΡΡ JRE.
- Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠΊΠΎΡΡΠ΅ΡΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ ΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
- ΠΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ ΠΊΠΎΠ΄Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Microbenchmarks.
- ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΡΠΊΠΎΠΉ ΠΊΠΎΠ΄Π°.
THE END
ΠΠΎΡ ΡΠ°ΠΊΠ°Ρ Π²ΡΠΆΠΈΠΌΠΊΠ° Π²ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΡΠΌΠ΅ΡΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π²ΡΡ ΠΎΠ΄Π° Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ. ΠΡΠ°Π²Π΄Π°, ΡΠ΅ΠΏΠ΅ΡΡ Π³Π»Π°Π²Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ Π² ΡΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π½Π°ΡΠ½ΡΡ Π²Π½Π΅Π΄ΡΡΡΡ Π΅Ρ, ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅, ΠΊΡΠΎ Π΅ΡΡ ΠΈ Π²ΠΎΡΡΠΌΡΡ Π²Π΅ΡΡΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ. Π ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠΊΠ° ΡΠ΅ΡΠΈΠ»ΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΡΡΡΠ° (Π½Π΅ ΡΡΠΈΡΠ°Ρ ΠΌΠ΅Π»ΠΊΠΎΠΉ ΠΊΠΎΡΠΌΠ΅ΡΠΈΠΊΠΈ) ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΡ Π²ΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ, Π° ΡΠΆΠ΅ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π³ΠΎΠ΄Ρ Π·Π°Π΄ΡΠΌΠ°ΡΡΡΡ Π½Π°ΡΡΡΡ ΡΡΠΎΠ³ΠΎ.
ΠΠΎΠ΄ΡΠ»ΠΈ Java 9 — JournalDev
ΠΠΎΠ΄ΡΠ»ΠΈ Java 9 — ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ°ΠΌΡΡ Π±ΠΎΠ»ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΡΡΡΠΊΡΡΡΠ΅ java. ΠΠ΄Π΅ΡΡ Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ Π΄Π°ΡΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΡΠΎΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΎ Β«ΠΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Java 9Β».
ΠΠΎΠ΄ΡΠ»ΠΈ Java 9
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅ΠΌΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Java 9.
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- Java SE 9: Jigsaw Project
- ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Java?
- ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Java SE 9
- Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ JDK 8 ΠΈ JDK 9
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ Java 9?
- ΠΠ°ΡΠ΅ΡΠΈΠ½ΡΠΊΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Java 9
- Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Java 8 ΠΈ Java 9
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠΎΡΠΏΠΎΡΠ°ΡΠΈΡ Oracle ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ»Π° Π²ΡΠΏΡΡΠΊ Java 9 Ρ ΠΌΠ°ΡΡΠ° 2017 Π³ΠΎΠ΄Π° Π½Π° ΡΠ΅Π½ΡΡΠ±ΡΡ 2017 Π³ΠΎΠ΄Π° .
ΠΠ°ΠΊ ΠΌΡ Π·Π½Π°Π΅ΠΌ, Java SE 8 ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΡΡΠ΅ΠΌΡ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π½ΠΎΠ²ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ (ΠΏΠ»ΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ ΠΈ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ).
- ΠΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
- Stream API
- Date API
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Java SE 9 ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΡΡΠ΅ΠΌΡ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ (ΠΏΠ»ΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ ΠΈ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ):
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Java (ΠΏΡΠΎΠ΅ΠΊΡ Jigsaw)
- Java REPL
- Milling Project Coin
Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Oracle Jigsaw.
Java SE 9: Jigsaw Project
Jigsaw Project ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Java SE 9: ΠΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Java .
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈ ΠΏΡΠ΅ΡΡΠΈΠΆΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΎΡ Oracle Corp Π² Π²Π΅ΡΡΠΈΠΈ Java SE 9. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΎΠ½ΠΈ Π½Π°ΡΠ°Π»ΠΈ ΡΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Java SE 7 Release. ΠΠ΄Π½Π°ΠΊΠΎ Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΠΎΠ½ Π±ΡΠ» ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½ Π½Π° Java SE 8, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ½ΠΎΠ²Π° ΠΎΡΠ»ΠΎΠΆΠ΅Π½. Π‘Π΅ΠΉΡΠ°Ρ ΠΎΠ½ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²ΡΠΏΡΡΡΠΈΡΡ Ρ Java SE 9 Π² ΡΠ΅Π½ΡΡΠ±ΡΠ΅ 2017 Π³ΠΎΠ΄Π°.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ΅Π»ΠΈ Jigsaw Project:
- ΠΠΎΠ΄ΡΠ»ΡΠ½ΡΠΉ JDK
- ΠΠΎΠ΄ΡΠ»ΡΠ½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄
- ΠΠΎΠ΄ΡΠ»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
- ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ API
- ΠΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Java
- jlink: Java Linker
ΠΠ°ΠΊ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° JDK ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊΠ°.ΠΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΡΠ΅ΡΠΈΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΠ°ΠΌ JDK Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ΄ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² (ΠΌΡ ΡΠΊΠΎΡΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΈΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ ).
Π’Π΅ΠΊΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ jar ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊΠΈ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ rt.jar ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊ, Π²Π΅ΡΠ½ΠΎ. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Java Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ΅Π»Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ — Β«Π Π΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ² Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ JDK ΠΈ JRE Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉΒ».
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ΅Π»Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ — Β«Π‘Π΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ API JDK Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½ΠΎ ΠΎΡΡΠ°Π²ΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΠΆΠ½ΡΡ , ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ APIΒ».
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ΅Π»Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ — Β«ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ²ΠΎΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ».
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ΅Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° jlink — Β«ΠΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ».
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΡΡΠΈ Π²Π΅ΡΠΈ, ΠΠ Π²ΠΎΠ»Π½ΡΠΉΡΠ΅ΡΡ. ΠΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ , Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΠΌΠΎΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡ .
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Java?
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Β«ΠΠ°ΡΠ΅ΠΌ Π½Π°ΠΌ Π½ΡΠΆΠ½Π° ΠΌΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Java SE 9Β», ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Java.
Π‘ΠΈΡΡΠ΅ΠΌΡ Java SE 8 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΈΠ»ΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Java.
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ JDK ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊ, Π΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ². Java SE 8 ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»Π° 3 ββΡΠΈΠΏΠ° ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΡ ΠΏΡΠΎΡΠΈΠ»Π΅ΠΉ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: compact1, compact2 ΠΈ compact3. ΠΠΎ ΡΡΠΎ Π½Π΅ ΡΠ΅ΡΠ°Π΅Ρ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
- Π€Π°ΠΉΠ»Ρ JAR, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ rt.jar ΠΈ Ρ. Π., Π‘Π»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊΠΈ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ .
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ JDK ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊ, Π½Π°ΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π»ΡΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
- Π ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Java Π½Π΅Ρ ΡΡΡΠΎΠ³ΠΎΠΉ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ Β«ΠΎΠ±ΡΠ΅Π³ΠΎΒ» Π΄ΠΎΡΡΡΠΏΠ° ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΎΡΠΊΡΡΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊ Π½Π΅ΠΌΡ Π΄ΠΎΡΡΡΠΏ.
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ JDK, JRE ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊ, Π΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠ±Π»ΠΈΠΊΠ° ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΎΡΠΊΡΡΡΠ°, ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ·Π±Π΅Π³Π°ΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ Π½Π΅ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ API, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ sun.*, * .internal. * ΠΈ Ρ. Π΄.
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ API, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
- ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π²Π΅Π»ΠΈΠΊΠΎ.
- ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΌΠ΅Π½ΡΡΡΡ ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ.
Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ Π²ΡΠ΅ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Oracle Corp ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²ΡΠΏΡΡΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Java Module Π² Java SE 9 Release.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Java SE 9
ΠΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Java SE 9 ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Java SE 9 ΡΠ°Π·Π΄Π΅Π»ΠΈΡ JDK, JRE, JAR ΠΈ Ρ. Π. ΠΠ° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ.Π’Π°ΠΊ ΡΡΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ ΠΌΠ°Π»ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ.
- ΠΡΠΎΡΡΠΎΡΠ° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΅ΠΌΠΎΠ½ΡΠΎΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡΡ.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π»ΡΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ — Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ, ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΡΠ΅Π½Ρ ΡΠΈΠ»ΡΠ½ΡΡ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ. (ΠΠ΅ Π²ΠΎΠ»Π½ΡΠΉΡΠ΅ΡΡ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ. Π‘ΠΊΠΎΡΠΎ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΅Π΅ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ).
- ΠΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ Π½Π΅ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ API.
- ΠΠΎΠ΄ΡΠ»ΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΡΠ΅Π½Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΡΠΊΡΡΠ²Π°ΡΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ»ΡΡΡΠΈΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ.
- ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π»ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ.
- ΠΠ΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΠ΅Π½ΡΡΠ΅ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ (SRP) Π»Π΅Π³ΠΊΠΎ.
Π‘ΠΊΠΎΡΠΎ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΡΠ΅ ΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΎΠ΄Π½Ρ Π·Π° Π΄ΡΡΠ³ΠΎΠΉ.
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ JDK 8 ΠΈ JDK 9
ΠΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ JDK. ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ JDK 8 ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ bin, jre, lib ΠΈ Ρ. Π. Π Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅ Java.
ΠΠ΄Π½Π°ΠΊΠΎ Oracle Corp Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π° ΡΡΡΡΠΊΡΡΡΡ ΠΏΠ°ΠΏΠΎΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΠ°ΠΏΠΊΠΈ JDK 8:
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΠ°ΠΏΠΊΠΈ JDK 9:
ΠΠ΄Π΅ΡΡ JDK 9 ΠΠ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ JRE. Π JDK 9 JRE Π²ΡΠ΄Π΅Π»Π΅Π½Π° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ°ΠΏΠΊΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ JDK 9 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½ΠΎΠ²ΡΡ ΠΏΠ°ΠΏΠΊΡ Β«jmodsΒ». ΠΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π°Π±ΠΎΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Java 9, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
Π JDK 9 Π±Π΅Π· rt.jar ΠΈ Π±Π΅Π· tools.jar
ΠΠ ΠΠΠΠ§ΠΠΠΠ: —
ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ Β«jmodsΒ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ 95 ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.Π ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡΡΡ.
ΠΏΠ°ΠΏΠΊΠ° Β«jmodsΒ» Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ $ {JAVA_HOME} / jmods. ΠΠ½ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡΠ»ΠΈ JDK.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ Java 9?
ΠΠΎΠ΄ΡΠ»Ρ — ΡΡΠΎ ΡΠ°ΠΌΠΎΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΊΠΎΠ΄Π°, Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΡΡΡΠΎΠ². ΠΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΡΠΈΠΏΠΎΠ² (ΠΊΠ»Π°ΡΡΠΎΠ², Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈ Ρ. Π.) Π‘ ΠΊΠΎΠ΄ΠΎΠΌ, Π΄Π°Π½Π½ΡΠΌΠΈ ΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°Π±ΠΎΡ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ (ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ) (SRP).
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅Π»ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Java 9 ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Java.
ΠΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Β«Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΡΒ» ΠΈ Β«ΠΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ JavaΒ» Π² ΠΌΠΎΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡ .
ΠΠ°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Java 9
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Java 9 ΠΈΠΌΠ΅Π΅Ρ 95 ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π² ΡΠ°Π½Π½Π΅ΠΌ Π΄ΠΎΡΡΡΠΏΠ΅ JDK. ΠΠΎΡΠΏΠΎΡΠ°ΡΠΈΡ Oracle ΡΠ°Π·Π΄Π΅Π»ΠΈΠ»Π° jar-ΡΠ°ΠΉΠ»Ρ JDK ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Java SE Π½Π° Π΄Π²Π° Π½Π°Π±ΠΎΡΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
- ΠΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ JDK Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ Β«jdk.* Β»
- ΠΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ Java SE Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ ΡΒ« java Β». *
ΠΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Java 9 ΠΈΠΌΠ΅Π΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Β« java.base Β». ΠΠ½ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΠ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ Β«java.baseΒ» ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠ°ΠΊ Β«ΠΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Java 9Β».
ΠΡΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ JDK ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ.
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Java 8 ΠΈ Java 9
ΠΡ ΡΠΆΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Java Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Java 5, 6,7 ΠΈΠ»ΠΈ 8.ΠΡ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Java 8 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΈ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ.
ΠΠΊΡΠ°ΡΡΠ΅, Ρ ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΠΈΠ» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Java 8 Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Java 8 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ — ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ. ΠΠ½ Π³ΡΡΠΏΠΏΠΈΡΡΠ΅Ρ Π½Π°Π±ΠΎΡ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ ΡΠΈΠΏΠ°ΠΌ, Π² Π³ΡΡΠΏΠΏΡ. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΡΡΡΠΎΠ².
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Java 9 Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π·Π½ΠΈΡΡ Ρ ΡΡΠΈΠΌ. ΠΠ½ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«ΠΠΎΠ΄ΡΠ»ΡΒ», ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°Π±ΠΎΡΠ° ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² Π³ΡΡΠΏΠΏΡ.Π Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ — Module Descriptor (Β«module-info.javaΒ»). ΠΡΠΎ ΠΎΠ½ΠΎ.
ΠΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Java 8 ΠΈΠΌΠ΅ΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Java 9 ΠΈΠΌΠ΅ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ.
ΠΠ ΠΠΠΠ§ΠΠΠΠ: —
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Java 9 ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΎΠ΄ΠΈΠ½ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Java 8, ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠΊΡΠ°ΡΡΠ΅ Ρ ΠΌΠΎΠ³Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Java 9 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ:
- ΠΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡΠ»Ρ
- ΠΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ
- ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ
- ΠΠ°Π±ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
- ΠΠ°Π±ΠΎΡ ΡΠΈΠΏΠΎΠ² ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ²
ΠΠ΄Π΅ΡΡ ΡΠ΅ΡΡΡΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ -info.java (ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ) ΠΈΠ»ΠΈ Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠ»ΠΈ XML.
Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠ»ΠΈ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΎΡΠΈΠΈ. ΠΡΠΌΠ°Ρ, ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΠΎΡΠ½ΠΎΠ²Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Java 9. Π ΠΌΠΎΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΅ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ Π±Π°Π·ΠΎΠ²ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ.Π― Π±ΡΠ΄Ρ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Java 9 ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΡΠΎ Π²ΡΠ΅, ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΌΡ Β«ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Java 9Β». ΠΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Java SE 9 Π² ΠΌΠΎΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡΡ .
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΠΌΠ½Π΅, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΡΡ ΠΌΠΎΠΉ ΠΏΠΎΡΡ ΠΈΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ / ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ / ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠΈΠΏΠ°.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΈΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ².
Π‘ΡΠ°ΡΡΠ»ΠΈΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Java SE 9!
Π‘ΡΡΠ»ΠΊΠ°: Project Jigsaw
.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΎΡΠΊΡΡΡΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π² Java 9 ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
- ΠΠΊΠΎΠ»ΠΎ
ΠΡΠΎΠ΄ΡΠΊΡΡ
- ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈ Π΄Π΅Π»ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Π’Π°Π»Π°Π½Ρ
ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ Π±ΡΠ΅Π½Π΄ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»ΡΠ Π΅ΠΊΠ»Π°ΠΌΠ°
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ ΡΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ°- Π ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
.
ΠΠ°ΠΊ ΠΌΠ½Π΅ Π½Π°Π·Π²Π°ΡΡ ΠΌΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Java 9?
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
- ΠΠΊΠΎΠ»ΠΎ
ΠΡΠΎΠ΄ΡΠΊΡΡ
- ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈ Π΄Π΅Π»ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Π’Π°Π»Π°Π½Ρ
ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ Π±ΡΠ΅Π½Π΄ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»ΡΠ Π΅ΠΊΠ»Π°ΠΌΠ°
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ ΡΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ°- Π ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
.
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π±Π΅Π·ΡΠΌΡΠ½Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΡΠΎΠ·Π΄Π°Π½ΠΎ Π² Java 9?
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
- ΠΠΊΠΎΠ»ΠΎ
ΠΡΠΎΠ΄ΡΠΊΡΡ
- ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈ Π΄Π΅Π»ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Π’Π°Π»Π°Π½Ρ
ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ Π±ΡΠ΅Π½Π΄ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»ΡΠ Π΅ΠΊΠ»Π°ΠΌΠ°
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ ΡΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ°- Π ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
.