JavaRush /Java Blog /Random-KO /커피 브레이크 #149. Java 8에서 Java 17로 업그레이드하는 방법. Java에서 목록을 반복...

커피 브레이크 #149. Java 8에서 Java 17로 업그레이드하는 방법. Java에서 목록을 반복하는 다양한 방법

Random-KO 그룹에 게시되었습니다

Java 8에서 Java 17로 마이그레이션하는 방법

출처: 중간 이 간행물을 사용하면 Java 8에서 Java 17로 쉽게 업그레이드할 수 있습니다 커피 브레이크 #149.  Java 8에서 Java 17로 업그레이드하는 방법. Java에서 목록을 반복하는 다양한 방법 - 1 . Java의 새로운 릴리스는 특히 LTS(장기 지원) 버전에 대해 이야기하는 경우 개발자에게 많은 새로운 기능을 제공합니다. 이전에 오류를 발견하여 성능을 향상시켰습니다. 그러나 지금까지 Java 17이 거의 1년 전에 출시되었음에도 불구하고 가장 인기 있는 언어 버전은 여전히 ​​Java 8입니다. 많은 사람들은 새 버전의 Java가 이전 버전과 완전히 호환되지 않는다고 믿고 업그레이드를 주저합니다. 업그레이드하려면 많은 노력이 필요합니다. 개인적으로는 업그레이드가 필요하다고 생각합니다. 업그레이드하는 데 몇 가지 문제가 있었지만 이미 Java 17을 사용하고 있습니다. 또한 Java 8이 오랫동안 무료 서비스가 중단되었다는 점을 고려해 볼 가치가 있습니다. Java 17 성능이 훨씬 좋습니다. 예를 들어 ZGC를 사용하면 더 이상 가비지 수집 설정 구성에 대해 걱정할 필요가 없습니다. Java 8에서 Java 17로 마이그레이션하려면 몇 가지 추가 작업을 수행해야 합니다. 이미 이 경로를 사용했기 때문에 새 버전으로 마이그레이션한 경험을 공유할 수 있습니다.

Maven 컴파일러 플러그인 버전 업데이트

일부 개발자의 경우 Maven 컴파일러 플러그인 버전이 너무 오래되었을 수 있습니다. Java 17로 작업하려면 Maven 컴파일러 플러그인 버전이 3.5.4 이상이어야 합니다.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>17</source> <target>17</target> </configuration> </plugin>

종속성 업데이트

Java 8에서 Java 17로 업그레이드하는 첫 번째 단계는 종속성을 업데이트하는 것입니다. 원래 사용한 종속성은 Java 17을 전혀 지원하지 않을 수 있으므로 버전 업그레이드의 영향을 최소화하려면 이를 업데이트해야 합니다. 그렇지 않으면 여러 가지 문제에 직면할 수 있습니다. 1. 예를 들어 Lombok에서는 컴파일 오류가 발생합니다. 오류 정보는 다음과 같습니다.
encloud-common 프로젝트에서 org.apache.maven.plugins:maven-compiler-plugin:3.2:compile(default-compile) 목표를 실행하지 못했습니다. 컴파일 중 치명적인 오류: java.lang.ExceptionInInitializerError: 필드를 비공개로 설정할 수 없습니다. com.sun .tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs 액세스 가능: 모듈 jdk.compiler는 이름이 지정되지 않은 모듈에 "com.sun.tools.javac.processing"을 열지 않습니다.
Lombok은 컴파일 타임에 생성된 코드를 주입하고 com.sun.tools.javac.* 패키지 의 클래스를 사용하므로 Lombok을 최신 버전으로 업데이트해야 합니다. 이렇게 하면 문제가 해결됩니다. 2. 사육사 연결은 UnresolvedAddressException 오류를 발생시킵니다 . 오류 정보는 다음과 같습니다.
org.apache.zookeeper.ClientCnxn - 서버 10.0.*.*/<unresolved>:2181에 대한 세션 0x0, 예상치 못한 오류, 소켓 연결 종료 및 재연결 시도 java.nio.channels.UnresolvedAddressException: sun.nio.ch의 null. Net .checkAddress(Net.java:149) ~[?:?] at sun.nio.ch.Net.checkAddress(Net.java:157) ~[?:?] at sun.nio.ch.SocketChannelImpl.checkRemote( SocketChannelImpl .java:816) ~[?:?] sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:839) ~[?:?] org.apache.zookeeper.ClientCnxnSocketNIO.registerAndConnect(ClientCnxnSocketNIO.java: 277 ) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] at org.apache.zookeeper.ClientCnxnSocketNIO.connect(ClientCnxnSocketNIO.java:287) ~[zookeeper-3.4.13.jar:3 .4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03 ] org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1021) ~[zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03] org.apache.zookeeper.ClientCnxn$ SendThread에 있습니다. 실행(클라이언트Cnxn .java:1064) [zookeeper-3.4.13.jar:3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03]
오류가 발생하는 이유는 Java 15에서 InetSocketAddressHolder 에 대한 toString 메소드가 리팩터링되었기 때문입니다 . Maven을 사용하는 경우 mvn versions:display-dependent-updates 명령을 사용하여 종속성 업데이트를 확인할 수 있습니다. 결과는 다음과 같습니다: 커피 브레이크 #149.  Java 8에서 Java 17로 업그레이드하는 방법. Java에서 목록을 반복하는 다양한 방법 - 2

종속성 추가

JAXB로 컴파일하면 오류가 발생합니다. 이는 JAXB가 Java 11에서 제거되었기 때문입니다. 따라서 일부 JAXB Maven 종속성을 추가해야 합니다.
<종속성> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </종속성> <종속성> <groupId>com.sun.xml .bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0</version> </dependent> <dependent> <groupId>com.sun.xml.bind</groupId> <artifactId> jaxb-impl</artifactId> <version>2.3.0</version> </dependent>
이 외에도 Java 11은 Java EE 및 CORBA 모듈도 제거하므로 javax 패키지를 수동으로 추가해야 합니다.
<종속성> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependent>

InaccessibleObjectException 처리

애플리케이션, 특히 setAccessible(true) 에서 리플렉션을 사용하는 경우 애플리케이션이 시작될 때 InaccessibleObjectException 오류가 발생할 가능성이 높습니다 . 이 오류는 특정 조건에서만 액세스를 허용하는 Java 플랫폼의 모듈식 시스템으로 인해 발생합니다.
  1. 클래스는 공개 클래스여야 합니다.
  2. 자신의 패키지를 내보내야 합니다.
이 오류를 해결하려면 모듈을 공개로 수동으로 설정할 수 있습니다. 이렇게 하려면 아래와 같이 Java 시작 명령줄에 --add-opens 옵션을 추가해야 합니다.
# --add-opens의 구문은 다음과 같습니다: {modules}/{package}=ALL-UNNAMED java --add-opens java.base/java.lang=ALL-UNNAMED
또는 최종적으로 이 문제를 해결하기 위해 Java 코드를 변경할 수도 있습니다.
module java.base {
    exports java.lang;
}
전반적으로 위의 모든 문제를 해결한 후에는 애플리케이션이 Java 17에서 제대로 실행될 것입니다. 이 문서가 Java 17로 마이그레이션하는 데 도움이 되기를 바랍니다.

Java에서 목록을 반복하는 다양한 방법

출처: Rrtutors 이 기사에서는 Java에서 목록을 반복하는 여러 가지 방법을 배웁니다. 커피 브레이크 #149.  Java 8에서 Java 17로 업그레이드하는 방법. Java에서 목록을 반복하는 다양한 방법 - 3컬렉션 프레임워크에는 순서가 지정된 개체 컬렉션을 유지할 수 있는 List 인터페이스가 있습니다. List 인터페이스는 ArrayList, LinkedList, Stack 및 Vector로 구현됩니다. 상당수의 Java 애플리케이션이 ArrayList 및 LinkedList를 사용합니다. 목록을 반복하는 방법에는 여러 가지가 있으며 각 방법에는 고유한 특성이 있습니다.

Java에서 목록을 반복하는 방법

Java에서 목록을 반복하는 세 가지 방법을 사용할 수 있습니다.
  • 고급 For 루프 방법을 사용합니다.
  • 반복자 방법을 사용합니다.
  • forEach 요소를 반복합니다.

1. 고급 For 루프 방법을 사용합니다.

이는 목록을 반복하는 데 사용할 수 있는 기본 for 루프 버전입니다 . 예는 다음과 같습니다.
import java.util.ArrayList;
import java.util.List;
public class Enhanced_for_loop {
            public static void main(String[] args) {
        List<Integer> figurez = new ArrayList<>();
        figurez.add(100);
        figurez.add(200);
        figurez.add(300);
        figurez.add(400);
        for(int i: figurez) {
            System.out.print(i+ " ");
        }
            }
}
결론:
100 200 300 400

2. 반복자 방법을 사용합니다.

반복자를 사용하여 목록을 반복할 수도 있습니다. 반복자는 반복 가능한 목록을 수정해야 할 때 특히 유용합니다. 예:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Iterate_List_using_Iterators {
            public static void main(String[] args) {
                        List<Integer> numbari = new ArrayList<>();
                        numbari.add(100);
                        numbari.add(200);
                        numbari.add(300);
                    Iterator<Integer> itr = numbari.iterator();
                    while(itr.hasNext()) {
                        int i = itr.next();
                        System.out.print(i+ " ");
                        if(i==3) {
                            itr.remove();
                        }

            }
            }
}
결론:
100 200 300

3. 각 요소에 대해 반복합니다.

람다 함수가 Java에 추가된 후 언어 구문에는 모든 컬렉션을 반복할 수 있는 forEach 함수가 도입되었습니다. 다음 코드 예제에서는 forEach 메서드를 사용하여 목록을 반복하는 방법을 보여줍니다.
import java.util.ArrayList;
import java.util.List;
public class Iterate_List_using_ForeEach_iterable {
            public static void main(String[] args) {
                        List<Integer> numbari = new ArrayList<>();
                        numbari.add(1);
                        numbari.add(2);
                        numbari.add(3);
                        numbari.add(4);
                        numbari.forEach(System.out::println);
            }
}
결론:
1 2 3 4
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION