programing

Java 9 이후로 이행할 때 모듈로 전환할 필요가 있습니까?

bestcode 2022. 11. 27. 11:35
반응형

Java 9 이후로 이행할 때 모듈로 전환할 필요가 있습니까?

자바 8 자바 11그러나 서비스 업그레이드는 생각보다 덜 힘들었습니다.으로는 버전 됩니다.build.gradle파일과 서비스는 정상적으로 가동되고 있습니다.라이브러리 및 이러한 lib를 사용하는 (마이크로) 서비스를 업그레이드했습니다.이치노

실제로 모듈로 전환할 필요가 있습니까?이로 인해 IMHO에 불필요한 비용이 발생합니다.어떠한 제안이나 더 많은 읽을거리도 감사하게 생각합니다.

명확히 하자면 모듈을 도입하지 않고 Java 9+ 코드를 사용하면 어떤 결과가 발생합니까?예를 들어 다른 코드와 호환되지 않을 수 있습니까?

아니요.

모듈로 전환할 필요가 없습니다.

모듈로 전환할 필요가 없었습니다.

Java 9 이후의 릴리스는 이름 없는 모듈의 개념을 통해 기존 클래스 경로에서 기존 JAR 파일을 지원하며, 우주의 열사까지 이를 수행할 수 있습니다.

모듈을 사용할지 여부는 전적으로 사용자에게 달려 있습니다.

큰 변화가 없는 대규모 레거시 프로젝트를 유지 보수하는 경우, 아마 노력할 가치가 없을 것입니다.

수년간 유지보수가 어려워진 대규모 프로젝트에 종사하는 경우 모듈화를 통해 명확성과 규율이 향상될 수 있지만 많은 작업이 필요할 수 있으므로 시작하기 전에 신중하게 생각해 보십시오.

새로운 프로젝트를 시작하는 경우 가능하면 모듈부터 시작하는 것이 좋습니다.현재 널리 사용되는 많은 라이브러리가 모듈로 업그레이드되어 있기 때문에 필요한 의존관계는 모두 모듈 형태로 이미 이용할 수 있습니다.

라이브러리를 관리하고 있는 경우 아직 업그레이드하지 않은 경우 및 라이브러리의 종속성이 모두 변환된 경우 이를 모듈로 업그레이드할 것을 강력히 권장합니다.

이 모든 것이 Java 8을 지나칠 때 몇 가지 걸림돌에 부딪히지 않는다는 뜻은 아닙니다., 모듈 자체와는 무관할 수 있습니다.2017년 Java 9를 출시한 이후 가장 일반적인 마이그레이션 문제는 버전 문자열 구문 변경내부 API(예:sun.misc.Base64Decoder의 경우, 퍼블릭 서포트되고 이, 수년 하게 되어 .

저는 그 문제에 대한 제 조직의 의견만 말씀드릴 수 있습니다.현재 진행 중인 프로젝트마다 모듈로 이동하는 중입니다.델이 구축하는 것은 기본적으로 마이크로 서비스 + 일부 클라이언트 라이브러리입니다.마이크로 서비스의 경우 로의 이행modules우선도가 낮은 것은 도커 컨테이너에 코드가 이미 격리되어 있기 때문에 도커 컨테이너에 포함된 '고장' 모듈은 그다지 중요하지 않은 것 같습니다.이 일은 천천히 진행되고 있지만 우선순위는 낮다.

한편, 클라이언트 라이브러리는 전혀 다른 이야기입니다.우리가 가끔 겪는 난장판은 말할 수 없어요.가 아까 한 하겠습니다.jigsaw모든 사람이 사용할 수 있도록 인터페이스를 클라이언트에 노출합니다.으로 그 「」가 됩니다.interfacepublic에 - 세상에 드러나다제가 은 그 에...package-private클라이언트에 노출되지 않고 해당 인터페이스를 사용하는 클래스입니다.고객이 그것을 사용하는 것을 원하지 않는다.그것은 사내용이기 때문이다.?틀렸어요.★★★★★★★★★★★★★★★★★★.

이 두 가지 문제가 때package-private클래스가 증가하여 더 많은 클래스가 필요한 경우 모든 것을 숨기려면 동일한 패키지에 클래스를 만드는 방법밖에 없습니다.

  package abc:
        -- /* non-public */ Usage.java
        -- /* non-public */ HelperUsage.java
        -- /* non-public */ FactoryUsage.java
        ....

(우리의 경우) 커지면, 그 패키지는 너무 커집니다. 그 , 그, 그, 그, 그.HelperUsage ★★★★★★★★★★★★★★★★★」FactoryUsage 되다public츠요시

두 번째 문제: 클라이언트의 모든 사용자/발신자가 동일한 패키지 이름을 생성하여 숨겨진 클래스를 확장할 수 있습니다.우리에게도 이미 몇 번 있었던 일이었어, 즐거운 시간들이었어.

modules.public그렇지는 않다 public 이상 가질 수 friend경 accessexports to 가 훨씬.이를 통해 코드 라이프 사이클과 관리가 훨씬 쉬워집니다.물론입니다.maven/gradle주로 우리를 위해 그것을 처리하지만, 문제가 생기면, 고통은 매우 현실적이 될 것이다.다른 사례들도 많이 있을 수 있습니다.

그렇긴 하지만, 전환은 여전히 쉽지 않다.첫째, 팀의 모든 사람들이 정렬이 필요하다; 둘째, 장애물이 있다.가장 큰 두 가지는 각 모듈을 구체적으로 무엇을 기준으로 구분하는가 하는 것입니다.아직 확답은 없습니다.는 ㅇㅇㅇㅇ입니다.split-packagesoh 아름다운 "같은 클래스가 다른 모듈에 의해 내보냅니다.라이브러리에서 이 문제가 발생할 경우 완화할 수 있는 방법이 있지만 외부 라이브러리일 경우에는...그렇게 쉽진 않아요

「 」에 하고 있는 jarA ★★★★★★★★★★★★★★★★★」jarB 모듈)단, 둘다 내보내기(스위치 모듈)입니다.abc.def.Util 가지가 .을 사용하다왠지 고통스럽지만 해결은 가능하죠

전체적으로 모듈로 이행한 이후(그리고 지금도 이행하고 있다) 코드는 훨씬 깨끗해졌습니다.또, 「코드 제일」의 기업이라면, 이것은 중요합니다.한편, 시니어 아키텍트에게 있어서, 「너무 비싸다」, 「실질적인 메리트가 없다」라고 생각되는 기업에 종사해 왔습니다.

언급URL : https://stackoverflow.com/questions/62950667/is-there-any-need-to-switch-to-modules-when-migrating-to-java-9-or-later

반응형