2017-10-01 6 views

답변

7

모듈 : 기능은 패키지의 모음으로 구성하는 방법과 유사한 패키지의 모음으로 구성 (클래스, 인터페이스, 패키지 등 유사) 자바 (9)에 도입 된 새로운 언어 유형.

JAR : 코드와 리소스를 묶어서 JVM에서로드 할 수있는 아카이브 파일 형식입니다.

은보다 구체적으로는, 모듈은 defined as follows입니다 :

우리는 근본적으로 새로운 종류로 모듈을 치료하는 기존의 툴 체인에 의해 개발자에게 가까이와 지원 가능한 모두 인 방법으로 신뢰할 수있는 구성과 강한 캡슐화를 제공하기 위해

자바 프로그램 구성 요소. 모듈은 코드 및 데이터의 명명 된 자체 설명 모음입니다. 이 코드는 Java 클래스 및 인터페이스와 같은 유형을 포함하는 패키지 세트로 구성됩니다. 그 데이터는 자원 및 다른 종류의 정적 정보를 포함합니다.

...

모듈의 자기 설명의 모듈 선언 자바 프로그래밍 언어의 새로운 구조로 표현된다.

...

모듈의 선언은 클래스 파일 출력 디렉토리에 유사하게 배치 module-info.class라는 이름의 파일로, 관례, 컴파일됩니다. ,

기존의 도구가 이미 생성, 조작 할 수 있고, JAR 파일을 소비 :

모듈 는 JAR 파일이 모듈 jar 파일을 표시하는 경우에 jar 파일로 컴파일 할 수 있습니다 채택 및 이전을 쉽게하기 위해 모듈 형 JAR 파일을 정의합니다. 모듈 형 JAR 파일은 루트 디렉토리에 module-info.class 파일을 포함한다는 점을 제외하면 모든 가능한 방법으로 일반 JAR 파일과 유사합니다. 모듈 및 JAR 사이

다른 어떤 차이 :

  1. 모듈 는 필요한 모듈 종속 클래스 액세스 할 수 있도록하기 위해 다른 모듈을 요구할 수있다. Jar에는 그러한 종속성 개념이 없습니다.

  2. 모듈은 모듈을 필요로하는 다른 모듈로 내보낼 클래스와 인터페이스를 결정할 수 있습니다. Jar에는 그러한 캡슐화 메커니즘이 없습니다.

  3. 모듈은 모듈 형 Jar 파일로 컴파일 될 수 있지만 일부 모듈 (예 : JDK 모듈)은 JMOD라는 다른 형식으로 컴파일됩니다.

  4. JAR의 이름은 변경할 수 있습니다. JVM 클래스 로더가 클래스 패스 (단일 JAR, 여러 JAR 또는 디렉토리 또는 JAR로 구성 될 수 있음)에서 필요한 클래스를 찾으면 JAR 파일의 이름은 무엇이든 될 수 있습니다. 그러나 모듈의 이름은 다른 모듈의 선언에서 명시 적으로 참조 될 수 있으며 그러한 이름은이를 정의하며 자유롭게 변경할 수 없습니다.

+1

'모듈은 이름이 붙여지고 자체적으로 설명되는 코드 및 데이터 모음입니다. ' JAR 파일에 대해서도 마찬가지입니다. JAR에는 이름이 있으며 자체 포함 된 코드 모음입니다. –

+2

@NeerajJain 사실이지만 JAR은 언어 또는 JVM 요소가 아닙니다. 또한 다른 JAR을 "요구"하거나 포함 된 코드에 액세스 제어를 제공한다는 개념이 없습니다. 모듈을 패키지와 비슷하게 생각하면 클래스와 인터페이스를 포함하는 대신 다른 모듈에서 액세스 할 수있는 패키지가 포함되어 있거나 포함되어 있지 않습니다. – manouti

7

JAR 파일 모듈입니까? 모듈이 JAR 파일과 다른 점은 무엇입니까?

없음은 Java Archive모듈 없습니다. 그냥 예를 들어

반면, the same package could have been spread across JARs의 클래스, 같은 패키지 지금 can not be read from multiple modules.

JAR은 단일 아카이브 파일에 여러 개의 파일을 번들 할 수있는 파일 형식입니다. 일반적으로 여기에는 클래스 파일과 애플릿 및 응용 프로그램과 관련된 보조 리소스가 포함됩니다. 한편

은 (I는 여기를 설명하려했던 ~>뿐만)

모듈 코드 및 데이터의 이름, 자체 설명 컬렉션이다. 그것의 코드는 세트 패키지, 즉 Java 클래스 및 인터페이스로 구성된 입니다. 그 데이터는 리소스 및 기타 종류의 정적 정보를 포함합니다.

이것은 또한 module-info.java의 도움으로 지정된 모듈 선언으로 구성됩니다.

각 모듈의 정의는 하나

  • 모듈 아티펙트, 즉 모듈 JAR 파일 또는 JMOD 파일 컴파일 된 모듈의 정의를 포함하거나, 다른

  • 분해 모듈 디렉토리 이름은 일반적으로 모듈의 이름이며 그 내용은 다음과 일치하는 "분해 된"디렉토리 트리입니다. 패키지 계층 구조.

모듈 시스템과 함께 소개 된 모듈 식 이미지는 JAR 파일이 아닌 모듈로 구성됩니다. 모듈화가 Modular WAR file as well.


의 관점에서 그러나 모듈Modular JAR file,의 도입의 용이성을 위해 동적 구성에 대한 예견은 이러한 module-info.java 같은

그 구성된 모듈에 대해 말할 수 그 JDK9 년에 도입되었다
module com.foo.bar { } 

다른 자바 클래스

com/foo/bar/alpha/AlphaFactory.java 
com/foo/bar/alpha/Alpha.java 
,174,515로서

기존 도구는 이미 JAR 파일을 생성, 조작 및 사용할 수 있습니다. A 모듈러 JAR 파일은 루트 디렉토리에 module-info.class 파일 을 포함한다는 점을 제외하면 모든 가능한 일반적인 JAR 파일과 같습니다. 모듈 형 JAR 파일이 모듈로 사용할 수 있습니다

META-INF/ 
META-INF/MANIFEST.MF 
module-info.class 
com/foo/bar/alpha/AlphaFactory.class 
com/foo/bar/alpha/Alpha.class 
... 

, 그 모듈 info.class 파일이 모듈의를 포함하는 촬영되는 경우 : 위의 com.foo.bar module를위한 모듈 형 JAR 파일은, 예를 들어, 내용이있을 수 있습니다 선언. 대체로 일반 클래스 경로에 배치 할 수 있습니다. 의 경우 module-info.class 파일이 무시됩니다.

6

엄밀히 말하면, 모듈은 런타임 개념입니다. 다른 사람들이 인용 한대로 The State of the Module system :

모듈은 코드와 데이터의 이름이 지정된 자체 수집 모음입니다. 이 코드는 Java 클래스 및 인터페이스와 같은 유형을 포함하는 패키지 세트로 구성됩니다. 그 데이터는 자원 및 다른 종류의 정적 정보를 포함합니다.

JAR 파일 매우 유사하다,하지만 ...

  1. 항아리
  2. JAR 파일은 "자체 설명"되지 않은 런타임에 의미있는 표현을이없는이 경우 수단에 그들은 JVM에 관심이 있거나 의존성을 표현하거나 적절한 API를 정의 할 수 없습니다.

이렇게하면 모듈은 어디서 오는 걸까요? 다양한 방법이 있지만 개발자를위한 가장 눈에 띄는 것은 모듈 식 JAR입니다. A 모듈 식 JAR은 일반 JAR과 비슷하지만, 모듈 설명자, , module-info.java에서 컴파일 된 파일 을 포함합니다. defines a module's name, dependencies, and APIs 인 파일입니다.

JAR과 모듈 사이에는 강력한 연결이 있습니다. JAR은 모듈 시스템이 모듈을 생성하는 컨테이너이며 각 JAR에는 단일 모듈 만 포함될 수 있습니다.Java 9 JAR에서도 이 모듈화되어야이되지 않는다는 점에 유의해야합니다. 일반 JAR은 전혀 문제가 없습니다.