GitHub Copilot App Modernization ใๆดป็จใใฆใ2 ใคใฎ Java ใฌใฌใทใผใขใใชใฑใผใทใงใณใๆๆฐใฎ Java 21 + Azure ๅฏพๅฟใซใใคใฐใฌใผใทใงใณใใใใณใบใชใณใงใใ
ใใฎใชใใธใใชใซใฏใ็ฐใชใไธไปฃใฎใฌใฌใทใผ Java ใขใใชใฑใผใทใงใณใ 2 ใคๅซใพใใฆใใพใใ
GitHub Copilot App Modernization for Java (VS Code ๆกๅผตๆฉ่ฝ) ใไฝฟใใAI ๆฏๆดใงใณใผใใฎใขใใใฐใฌใผใใปAzure ็งป่กใไฝ้จใใพใใ
| ใขใใช | ็พๅจใฎๆ่กในใฟใใฏ | ใใคใฐใฌใผใทใงใณๅ |
|---|---|---|
| javaee-legacy-app | Java 8 + Java EE 7 (Servlet/JSP) | Java 21 + Jakarta EE 10 |
| spring-legacy-app | Java 11 + Spring Boot 2.7.18 | Java 21 + Spring Boot 3.5 |
| ใใผใซ | ็จ้ |
|---|---|
| VS Code (1.101 ไปฅ้) | ้็บใจใใฃใฟ |
| GitHub Copilot (ๆๅนใชใตใในใฏใชใใทใงใณ) | AI ใณใผใใฃใณใฐๆฏๆด |
| GitHub Copilot App Modernization ๆกๅผตๆฉ่ฝ | Java ใใคใฐใฌใผใทใงใณๆฏๆด |
| Java 21 (Microsoft Build of OpenJDK ๆจๅฅจ) | ใฟใผใฒใใ JDK / ใใผใซๅฎ่ก็ฐๅข |
| Maven | ใใซใใใผใซ |
ใใฎใชใใธใใชใซใฏ Dev Container ่จญๅฎใๅซใพใใฆใใพใใVS Code ใฎ Dev Containers ๆกๅผตๆฉ่ฝใไฝฟใใจใๅฟ ่ฆใช SDK ใใในใฆ่ชๅใคใณในใใผใซใใใพใใ
ใใฎใชใใธใใชใฏ ใใซใใซใผใใฏใผใฏในใใผใน ใจใใฆๆงๆใใใฆใใพใใjava-app-modernization.code-workspace ใ้ใใจใๅใขใใชใฑใผใทใงใณใ็ฌ็ซใใใใฉใซใใจใใฆ่ช่ญใใใไปฅไธใฎใกใชใใใใใใพใ๏ผ
- ๅใขใใชใใจใซๅๅฅใฎใใซใ่จญๅฎใปใใใใฐ่จญๅฎใ้ฉ็จใใใ
- GitHub Copilot App Modernization ใๅใขใใชใ็ฌ็ซใใใใญใธใงใฏใใจใใฆ่ช่ญ
- ใใฉใซใใใจใซ้ฉๅใช Java/Maven ใใผใธใงใณใ่ชๅๅๆฟ
ใฏใผใฏในใใผในใ้ใๆนๆณ:
# VS Code ใงใฏใผใฏในใใผในใใกใคใซใ็ดๆฅ้ใ
code java-app-modernization.code-workspaceใพใใฏใVS Code ใกใใฅใผใใ ใใกใคใซ โ ใใกใคใซใงใฏใผใฏในใใผในใ้ใ ใ้ธๆใใjava-app-modernization.code-workspace ใ้ธๆใใฆใใ ใใใ
ใฏใผใฏในใใผในๆงๆ:
| ใใฉใซใๅ | ใใน | ่ชฌๆ |
|---|---|---|
| root | . |
ใใญใธใงใฏใใซใผใ (ๅ ฑ้่จญๅฎใปใใญใฅใกใณใ) |
| javaee-legacy-app (Java 8 โ 21) | javaee-legacy-app/ |
Java EE ใฌใฌใทใผใขใใช |
| spring-legacy-app (Boot 2 โ 3) | spring-legacy-app/ |
Spring Boot ใฌใฌใทใผใขใใช |
# Dev Container ใฎ่ตทๅๅพใSDKMAN ใงไปฅไธใ่ชๅใคใณในใใผใซใใใพใ:
# Java: 8.0.472-amzn / 11.0.26-amzn / 21.0.9-amzn
# Maven: 3.6.3 / 3.8.8 / 3.9.12ๅใใฃใฌใฏใใชใซ .sdkmanrc ใ้
็ฝฎใใใฆใใใcd ใใใ ใใง้ฉๅใช Java/Maven ใใผใธใงใณใซ่ชๅๅๆฟใใใพใใ
| ใใฃใฌใฏใใช | Java | Maven | ็จ้ |
|---|---|---|---|
/ (ใใญใธใงใฏใใซใผใ) |
21.0.9-amzn | 3.9.12 | ใใผใซๅฎ่ก / ใใคใฐใฌใผใทใงใณๅ |
javaee-legacy-app/ |
8.0.472-amzn | 3.6.3 | ใฌใฌใทใผใขใใชโ |
spring-legacy-app/ |
11.0.26-amzn | 3.8.8 | ใฌใฌใทใผใขใใชโก |
java-app-modernization-sample/
โโโ .sdkmanrc # Java 21 / Maven 3.9.12 ่ชๅๅๆฟ (ใใผใซๅฎ่ก็จ)
โโโ java-app-modernization.code-workspace # ใใซใใซใผใใฏใผใฏในใใผใน่จญๅฎ
โโโ README.md # โ ใใฎใใกใคใซ (ใใณใบใชใณๆ้ )
โโโ .devcontainer/
โ โโโ devcontainer.json # Dev Container ่จญๅฎ
โ โโโ post-create.sh # SDKMAN + SDK ่ชๅใคใณในใใผใซ
โโโ javaee-legacy-app/ # ๐ด ใฌใฌใทใผใขใใชโ (Java 8 / Java EE 7)
โ โโโ .sdkmanrc # Java 8 / Maven 3.6.3 ่ชๅๅๆฟ
โ โโโ pom.xml
โ โโโ README.md # ใขใใช่ฉณ็ดฐ่ชฌๆ
โ โโโ src/
โโโ spring-legacy-app/ # ๐ด ใฌใฌใทใผใขใใชโก (Java 11 / Spring Boot 2)
โโโ .sdkmanrc # Java 11 / Maven 3.8.8 ่ชๅๅๆฟ
โโโ pom.xml
โโโ README.md # ใขใใช่ฉณ็ดฐ่ชฌๆ
โโโ src/
Microsoft ใๆไพใใ VS Code ๆกๅผตๆฉ่ฝใงใไปฅไธใฎๆฉ่ฝใๅใใฆใใพใ๏ผ
| ๆฉ่ฝ | ่ชฌๆ |
|---|---|
| App Assessment | AppCAT ใซใใใณใผใๅๆ โ ใฏใฉใฆใๅฏพๅฟๅบฆใฎ่ฉไพกใฌใใผใ็ๆ |
| Code Transformation | OpenRewrite + AI ใซใใใณใผใ่ชๅๅคๆ |
| Build & Patch | ใใซใๆค่จผ โ ใจใฉใผ่ชๅไฟฎๆญฃ |
| CVE Scan | ่ๅผฑๆงใฎๆคๅบใจไฟฎๆญฃ |
| Unit Test Migration | ๆขๅญใในใใฎ็งป่ก + ๆฐ่ฆใในใ็ๆ |
| Containerize & Deploy | Dockerfile ็ๆ โ Azure ใใใญใค |
VS Code ใงไปฅไธใฎๆกๅผตๆฉ่ฝใใคใณในใใผใซใใฆใใ ใใ๏ผ
- GitHub Copilot โ
GitHub.copilot - GitHub Copilot Chat โ
GitHub.copilot-chat - GitHub Copilot App Modernization โ
vscjava.migrate-java-to-azure
cd javaee-legacy-app
mvn clean package
mvn tomcat7:runใใฉใฆใถใง http://localhost:8080/ ใซใขใฏใปในใใใขใใชใ Java 8 ใงๅไฝใใใใจใ็ขบ่ชใใพใใ
http://localhost:8080/sysinfo ใง้ๆจๅฅจ API ใฎๅไฝใ็ขบ่ชใใพใใ
- VS Code ใตใคใใใผใง GitHub Copilot App Modernization ใใใซใ้ใ
- ASSESSMENT ใปใฏใทใงใณใฎ Run Assessment ใใฏใชใใฏ
- AppCAT ใใณใผใใๅๆใใไปฅไธใๅซใ่ฉไพกใฌใใผใใ็ๆใใใพใ๏ผ
- Java 8 โ 21 ใงๅ้คใใใ API ใฎไธ่ฆง
- CVE ่ๅผฑๆงใๆใคใฉใคใใฉใชใฎๆคๅบ
- javax โ jakarta ใธใฎ็งป่กใๅฟ ่ฆใช็ฎๆ
- Azure ็งป่กใซๅฟ ่ฆใชๅคๆด็น
Copilot Chat ใ Agent Mode ใง้ใใไปฅไธใฎใใญใณใใใๅฎ่กใใพใ๏ผ
Upgrade project to Java 21 using Java upgrade tools
ใใผใซใใขใใใฐใฌใผใใใฉใณใ็ๆใใพใใใใฉใณใฎๅ ๅฎนใ็ขบ่ชใใContinue ใงๅฎ่กใใพใใ
ไธปใชๅคๆๅ ๅฎน:
| ๅคๆ้ ็ฎ | Before (Java 8) | After (Java 21) |
|---|---|---|
| Base64 ใจใณใณใผใ | sun.misc.BASE64Encoder |
java.util.Base64 |
| XML ใใคใณใใฃใณใฐ | javax.xml.bind (JAXB) |
Jakarta XML Binding or ไปฃๆฟ |
| JavaScript ใจใณใธใณ | Nashorn (ScriptEngine) |
GraalJS or ไปฃๆฟ |
| ใฉใใใผใณใณในใใฉใฏใฟ | new Integer(42) |
Integer.valueOf(42) |
| ในใฌใใๅถๅพก | Thread.stop() / finalize() |
Thread.interrupt() + try-with-resources |
| ใปใญใฅใชใใฃใใใผใธใฃ | SecurityManager |
ไปฃๆฟใปใญใฅใชใใฃๆฉๆง |
| ๅๅ็ฉบ้ | javax.* |
jakarta.* |
TASKS ใปใฏใทใงใณใฎ Quality & Security Tasks โ CVE Scan ใๅฎ่กใใ่ๅผฑใชใฉใคใใฉใชใๅฎๅ จใชใใผใธใงใณใซๆดๆฐใใพใใ
| ใฉใคใใฉใช | ็พๅจใฎใใผใธใงใณ | ไธปใช CVE |
|---|---|---|
| Log4j 1.x | 1.2.17 | CVE-2021-4104 |
| Commons Collections | 3.2.1 | CVE-2015-6420 |
| Commons FileUpload | 1.3.1 | CVE-2016-1000031 |
| Jackson Databind | 2.9.8 | CVE-2019-12384 ไป |
| Apache HttpClient | 4.5.2 | CVE-2020-13956 |
# Java 21 ใงใใซใใ้ใใใจใ็ขบ่ช
sdk use java 21.0.9-amzn
sdk use maven 3.9.12
mvn clean packagecd spring-legacy-app
mvn clean package -DskipTests
mvn spring-boot:runใใฉใฆใถใง http://localhost:8081/ ใซใขใฏใปในใใใขใใชใๅไฝใใใใจใ็ขบ่ชใใพใใ
http://localhost:8081/sysinfo ใงใใคใฐใฌใผใทใงใณๅ้กใจใชใใณใผใใฎๅไฝใ็ขบ่ชใใพใใ
- VS Code ใตใคใใใผใง GitHub Copilot App Modernization ใใใซใ้ใ
- Run Assessment ใๅฎ่ก
- ่ฉไพกใฌใใผใใงไปฅไธใๆคๅบใใใพใ๏ผ
- javax โ jakarta ใฎ็งป่กใๅฟ ่ฆใช็ฎๆ
- Spring Security ใฎ้ๆจๅฅจ API
- spring.factories ใฎๅปๆญข
- CVE ่ๅผฑๆงใฉใคใใฉใช
Agent Mode ใงไปฅไธใฎใใญใณใใใๅฎ่กใใพใ๏ผ
Upgrade project to Java 21 and Spring Boot 3.5 using Java upgrade tools
ไธปใชๅคๆๅ ๅฎน:
| ใซใใดใช | Before (Boot 2) | After (Boot 3) |
|---|---|---|
| Java ใใผใธใงใณ | 11 | 21 |
| Spring Boot | 2.7.18 | 3.5.x |
| ๅๅ็ฉบ้ | javax.servlet.* / javax.persistence.* / javax.validation.* |
jakarta.servlet.* / jakarta.persistence.* / jakarta.validation.* |
| Security ่จญๅฎ | extends WebSecurityConfigurerAdapter |
@Bean SecurityFilterChain |
| URL ใใใใณใฐ | antMatchers() |
requestMatchers() |
| ่ชๅฏ่จญๅฎ | authorizeRequests() |
authorizeHttpRequests() |
| MVC ่จญๅฎ | extends WebMvcConfigurerAdapter |
implements WebMvcConfigurer |
| Auto Configuration | META-INF/spring.factories |
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports |
| Trailing Slash | ใใใฉใซใๆๅน | ใใใฉใซใ็กๅน โ ๆ็คบ็่จญๅฎใๅฟ ่ฆ |
| ใใญใใใฃ | spring.redis.* ็ญ |
spring.data.redis.* ็ญ |
| ใฉใคใใฉใช | ็พๅจใฎใใผใธใงใณ | ไธปใช CVE |
|---|---|---|
| SnakeYAML | 1.30 | CVE-2022-1471 |
| H2 Database | 2.1.210 | CVE-2022-23221 |
| Log4j 1.x | 1.2.17 | CVE-2021-4104 |
| Commons Text | 1.9 | CVE-2022-42889 (Text4Shell) |
| Gson | 2.8.6 | CVE-2022-25647 |
# Java 21 + Spring Boot 3 ใงใใซใใ้ใใใจใ็ขบ่ช
sdk use java 21.0.9-amzn
sdk use maven 3.9.12
mvn clean packageใใคใฐใฌใผใทใงใณๅฎไบๅพใGitHub Copilot App Modernization ใฎ Deploy ๆฉ่ฝใไฝฟใฃใฆ Azure ใซใใใญใคใงใใพใใ
| Azure ใตใผใใน | ้ฉ็จใทใใชใช |
|---|---|
| Azure App Service | Web ใขใใชใฎใใใผใธใใในใใฃใณใฐ (Java 21 ๅฏพๅฟ) |
| Azure Container Apps | ใณใณใใๅใใใใใคใฏใญใตใผใใน |
| Azure Kubernetes Service | Kubernetes ใใผในใฎใชใผใฑในใใฌใผใทใงใณ |
- TASKS ใปใฏใทใงใณใฎ Containerize & Deploy ใ้ธๆ
- Copilot ใ Dockerfile ใจ Azure ใใใญใค็จใฎ IaC ใใกใคใซใ็ๆ
- Azure ใชใฝใผในใฎใใญใใธใงใใณใฐใจใใใญใคใๅฎ่ก
Java 8 โโโโโโโโโโโโโโโโโโโโโโโโโโโ Java 21
Java EE 7 (javax.*) โโโโโโโโโโโโโโ Jakarta EE 10 (jakarta.*)
Servlet 3.1 / JSP 2.3 โโโโโโโโโโโโ Jakarta Servlet 6.0 / JSP 4.0
Log4j 1.x (CVE) โโโโโโโโโโโโโโโโโโ Log4j 2.x or SLF4J + Logback
Commons Collections 3.x (CVE) โโโโโ 4.x
Jackson Databind 2.9 (CVE) โโโโโโโโ 2.17+
tomcat7-maven-plugin โโโโโโโโโโโโโโ Spring Boot ๅ or Tomcat 10+
Java 11 โโโโโโโโโโโโโโโโโโโโโโโโโโ Java 21
Spring Boot 2.7.18 โโโโโโโโโโโโโโโ Spring Boot 3.5.x
Spring Framework 5.3 โโโโโโโโโโโโโ Spring Framework 6.2
Spring Security 5.x โโโโโโโโโโโโโโ Spring Security 6.x
javax.* ๅๅ็ฉบ้ โโโโโโโโโโโโโโโโโโ jakarta.* ๅๅ็ฉบ้
spring.factories โโโโโโโโโโโโโโโโโโ AutoConfiguration.imports
SnakeYAML 1.30 (CVE) โโโโโโโโโโโโโ 2.x
H2 2.1.210 (CVE) โโโโโโโโโโโโโโโโโ 2.3+
MIT License