[SCALA] 어셈블리 병합-전략 문제 SBT-어셈블리를 사용
SCALA어셈블리 병합-전략 문제 SBT-어셈블리를 사용
나는 SBT-어셈블리를 사용하여 배포 지방 항아리에 스칼라 프로젝트를 변환하려합니다. 때 나는 다음과 같은 오류를 얻고있다 SBT 내 조립 작업을 실행 :
Merging 'org/apache/commons/logging/impl/SimpleLog.class' with strategy 'deduplicate'
:assembly: deduplicate: different file contents found in the following:
[error] /Users/home/.ivy2/cache/commons-logging/commons-logging/jars/commons-logging-1.1.1.jar:org/apache/commons/logging/impl/SimpleLog.class
[error] /Users/home/.ivy2/cache/org.slf4j/jcl-over-slf4j/jars/jcl-over-slf4j-1.6.4.jar:org/apache/commons/logging/impl/SimpleLog.class
이제 SBT 어셈블리 문서에서 :
다음과 같이 I 설정으로 내 build.sbt가는 :
import sbt._
import Keys._
import sbtassembly.Plugin._
import AssemblyKeys._
name := "my-project"
version := "0.1"
scalaVersion := "2.9.2"
crossScalaVersions := Seq("2.9.1","2.9.2")
//assemblySettings
seq(assemblySettings: _*)
resolvers ++= Seq(
"Typesafe Releases Repository" at "http://repo.typesafe.com/typesafe/releases/",
"Typesafe Snapshots Repository" at "http://repo.typesafe.com/typesafe/snapshots/",
"Sonatype Repository" at "http://oss.sonatype.org/content/repositories/releases/"
)
libraryDependencies ++= Seq(
"org.scalatest" %% "scalatest" % "1.6.1" % "test",
"org.clapper" %% "grizzled-slf4j" % "0.6.10",
"org.scalaz" % "scalaz-core_2.9.2" % "7.0.0-M7",
"net.databinder.dispatch" %% "dispatch-core" % "0.9.5"
)
scalacOptions += "-deprecation"
mainClass in assembly := Some("com.my.main.class")
test in assembly := {}
mergeStrategy in assembly := mergeStrategy.first
build.sbt의 마지막 줄에서, 내가 가진 :
mergeStrategy in assembly := mergeStrategy.first
내가 SBT를 실행할 때 지금, 나는 다음과 같은 오류가 발생합니다 :
error: value first is not a member of sbt.SettingKey[String => sbtassembly.Plugin.MergeStrategy]
mergeStrategy in assembly := mergeStrategy.first
내가 여기에 잘못된 일을 할 수있는 무엇을 누군가 지점 수 있습니까?
감사
해결법
-
==============================
1.나는에 mergeStrategy 때문에 조립이, 자본 M으로 MergeStrategy.first을해야한다고 생각 : = MergeStrategy.first.
나는에 mergeStrategy 때문에 조립이, 자본 M으로 MergeStrategy.first을해야한다고 생각 : = MergeStrategy.first.
-
==============================
2.현재 버전 0.11.2 (2014년 3월 25일)에 관해서는, 병합 전략을 정의하는 방법이 다릅니다.
현재 버전 0.11.2 (2014년 3월 25일)에 관해서는, 병합 전략을 정의하는 방법이 다릅니다.
이 여기에 설명되어 있습니다, 관련 부분은 다음과 같습니다
새로운 방법은 (동일한 소스에서 복사)한다 :
mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => { case PathList("javax", "servlet", xs @ _*) => MergeStrategy.first case PathList(ps @ _*) if ps.last endsWith ".html" => MergeStrategy.first case "application.conf" => MergeStrategy.concat case "unwanted.txt" => MergeStrategy.discard case x => old(x) } }
이것은이 변경되었을 때 내가 정확히 모르는뿐만 아니라 이전 버전의 가능성이 적용됩니다.
-
==============================
3.난 그냥 설치를 요구 일부 mergeStrategies를 해킹 할 수있는 작은 SBT 프로젝트가 있고, 조금 오래된 답을 발견, 내가 (2015년 4월 7일 현재) 버전에 대한 내 작업 코드를 추가 할 수 있도록
난 그냥 설치를 요구 일부 mergeStrategies를 해킹 할 수있는 작은 SBT 프로젝트가 있고, 조금 오래된 답을 발견, 내가 (2015년 4월 7일 현재) 버전에 대한 내 작업 코드를 추가 할 수 있도록
-
==============================
4.새로운 SBT 버전 (SBT 버전 : 0.13.11)의 경우, 내가 SLF4J에 대한 오류를 얻고 있었다; 여기 스칼라 SBT 조립 꽤 수동으로 수행하기 위해 냉각되는 SBT 의존성 그래프 도구를 언급 StaticLoggerBinder.class에 기인하는 중복 제거 오류를 병합 할 수 없습니다 답을 확인하십시오 : 밖으로 당분간은 쉬운 방법을했다
새로운 SBT 버전 (SBT 버전 : 0.13.11)의 경우, 내가 SLF4J에 대한 오류를 얻고 있었다; 여기 스칼라 SBT 조립 꽤 수동으로 수행하기 위해 냉각되는 SBT 의존성 그래프 도구를 언급 StaticLoggerBinder.class에 기인하는 중복 제거 오류를 병합 할 수 없습니다 답을 확인하십시오 : 밖으로 당분간은 쉬운 방법을했다
assemblyMergeStrategy in assembly <<= (assemblyMergeStrategy in assembly) { (old) => { case PathList("META-INF", xs @ _*) => MergeStrategy.discard case x => MergeStrategy.first } }
-
==============================
5.이것은 일반적인 자바 / 스칼라 프로젝트의 대부분을 병합하는 적절한 방법입니다. 그것은 META-INF와 클래스 처리합니다.
이것은 일반적인 자바 / 스칼라 프로젝트의 대부분을 병합하는 적절한 방법입니다. 그것은 META-INF와 클래스 처리합니다.
또한 META-INF에서 서비스 등록은 알아서한다.
assemblyMergeStrategy in assembly := { case x if Assembly.isConfigFile(x) => MergeStrategy.concat case PathList(ps @ _*) if Assembly.isReadme(ps.last) || Assembly.isLicenseFile(ps.last) => MergeStrategy.rename case PathList("META-INF", xs @ _*) => (xs map {_.toLowerCase}) match { case ("manifest.mf" :: Nil) | ("index.list" :: Nil) | ("dependencies" :: Nil) => MergeStrategy.discard case ps @ (x :: xs) if ps.last.endsWith(".sf") || ps.last.endsWith(".dsa") => MergeStrategy.discard case "plexus" :: xs => MergeStrategy.discard case "services" :: xs => MergeStrategy.filterDistinctLines case ("spring.schemas" :: Nil) | ("spring.handlers" :: Nil) => MergeStrategy.filterDistinctLines case _ => MergeStrategy.first } case _ => MergeStrategy.first}
-
==============================
6.빠른 업데이트 : mergeStrategy가되지 않습니다. 사용 assemblyMergeStrategy. 그 외에도에서, 이전 응답은 여전히 고체
빠른 업데이트 : mergeStrategy가되지 않습니다. 사용 assemblyMergeStrategy. 그 외에도에서, 이전 응답은 여전히 고체
-
==============================
7.build.sbt에 다음은 소스 또는 대상으로 카프카를 추가하려면 추가
build.sbt에 다음은 소스 또는 대상으로 카프카를 추가하려면 추가
assemblyMergeStrategy in assembly := { case PathList("META-INF", xs @ _*) => MergeStrategy.discard //To add Kafka as source case "META-INF/services/org.apache.spark.sql.sources.DataSourceRegister" => MergeStrategy.concat case x => MergeStrategy.first }
from https://stackoverflow.com/questions/14791955/assembly-merge-strategy-issues-using-sbt-assembly by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 동적 스칼라 2.11 런타임에 스칼라 클래스 파일을 컴파일 (0) | 2019.11.16 |
---|---|
[SCALA] 밀봉 특성의 서브 클래스를 얻기 (0) | 2019.11.16 |
[SCALA] 왜 정적 방법은 좋은 OO 연습 간주됩니다? [닫은] (0) | 2019.11.16 |
[SCALA] 어떻게 특정 유형에 배우 메시지를 제한하려면? (0) | 2019.11.16 |
[SCALA] 스칼라 REPL은 오류가 발생합니다 (0) | 2019.11.16 |