2017-10-11 15 views
3

나는 종속성 사용 받는다는와 자바 9 데모 프로젝트 구축을 위해 노력하고있다 : 그러나Java 9 모듈 시스템과 호환되지 않는 이름으로 Maven 종속성을 해결하는 방법은 무엇입니까?

<dependency> 
    <groupId>org.apache.spark</groupId> 
    <artifactId>spark-mllib_2.10</artifactId> 
    <version>2.2.0</version> 
</dependency> 

을 내 프로젝트의 module-info.java에서 사용하는 자동 모듈 이름을 결정하는 단지 도구를 실행할 때 다음과 같은 오류가 발생합니다 :

$ jar --file=spark-mllib_2.10/2.2.0/spark-mllib_2.10-2.2.0.jar --describe-module 
Unable to derive module descriptor for: spark-mllib_2.10/2.2.0/spark-mllib_2.10-2.2.0.jar 
spark.mllib.2.10: Invalid module name: '2' is not a Java identifier 

자동 모듈 알고리즘은이 jar에 유효한 java라는 이름을 사용할 수 없습니다. 이 공식은 모듈의 이름이나 자신의 모듈을 예약 추가하기 전에 내가 내 프로젝트에서이 종속성을 사용할 수 있습니다

package org.apache.spark.mllib.linalg does not exist 

어쨌든 거기 : 적절한 추가가 필요없이 내가 같은 스파크 mllib의 패키지가 누락 오류를 컴파일 얻을 -info?

+1

[제안 된 제안] (https://stackoverflow.com/a/46501811/1746118)처럼 보일 수도 있습니다. 이 진행자는 소유자의 눈에 띄지 않습니다. – nullpointer

+2

모듈 이름은 대부분의 JAR 파일에서 파생 될 수 있지만 유용한 이름으로 매핑 할 수없는 이상한 이름을 가진 일부 예외가 있습니다. 이 경우 Apache Spark 프로젝트에 모듈 이름을 선택하고 "Automatic-Module-Name"속성을 사용하여 JAR 파일에 추가하라는 버그를 제출하는 것이 좋습니다. 명시 적 모듈을 게시하는 것이 더 좋지만 아직 수행 할 준비가되지 않았을 수 있습니다. –

답변

1

적절하고 장기적인 해결책을 위해 Apache Spark 프로젝트는 JAR에 모듈 선언 (module.info.java)을 추가하거나 JAR의 매니페스트에 Automatic-Module-Name 항목을 설정해야합니다.

당신이 기다릴 수없는 경우에, 당신은 아주 쉽게 자신 후자를 수행 할 수 있습니다

  1. 다음과 같은 내용으로 파일 manifest.txt을 만듭니다

    Automatic-Module-Name: org.apache.spark.mlib2 
    
  2. 가 해당 항목을 추가 JAR의 명단 :

    jar --update --file spark-mllib_2.10.jar --manifest=manifest.txt 
    
  3. 일 : 새 버전을 사용자가 실제 프로젝트에서이 JAR을 사용할 계획이라면

    jar --describe-module --file spark-mllib_2.10.jar 
    

, 당신은 당신의 동료가 사용할 수 있도록 할있는 내가 만드는 것 (? 어쩌면 2.10.patched-auto-name), 업로드 그것을 회사의 넥서스에 전달한 다음 POM을 편집하여 원본 의존성을 원래의 의존성으로 대체하십시오.

이 모든 노력을 기울일 가치가 없기 때문에 기다리고 싶을 수도 있습니다.

+0

은'manifest.mf'가 아니어야합니까? – nullpointer

+3

아니요,'manifest' 옵션으로 사용하는 파일의 이름은 중요하지 않습니다. 모든'병 (jar')에 대해 '거짓말'이 될 수 있습니다. 단순히 내용을 파일 밖으로 가져 와서 올바른 위치에 추가합니다. – Nicolai

+1

이것은 완벽하게 작동했습니다. jar 파일의 기존 MANFEST.MF 파일에 항목을 추가하기 만하면되므로 업데이트 파일의 이름은 달라질 수 있습니다. 한 가지주의 할 점은 업데이트 파일을 새 행으로 끝내거나 업데이트가 자동으로 실패해야한다는 것입니다. 여기에 설명 된대로 로컬 저장소에 업데이트 된 jar 파일을 추가합니다. https://stackoverflow.com/q/2229757/8757510 –