2014-12-07 3 views
12

저는 scala와 sbt 세계에 대한 새로운 기능을 가지고 있으며, maven을 사용하지 않고 sbt로 모든 새 프로젝트를 관리하려고합니다. 하지만 지금은 내가 더 이상 몰라요 지점에있어 내가 mavnen 그늘 플러그인에 대한 sbt 대응을 찾을 수 없기 때문에. 필자가 발견 한 것은 모든 의존성을 포함하는 플러그인 이었지만, 필자가 필요로하는 것은 아닙니다. 그럼 누군가가 항아리에 특정 종속성을 포함하는 플러그인을 알고 있습니까?SBT 용 플러그인 maven-shade

+1

내가 2.7 이후 스칼라를 쓰고있다 그리고 나는 아직도 메이븐, FWIW를 사용하는 것을 선호합니다. – lmm

+0

[sbt-assembly plugin] (https://github.com/sbt/sbt-assembly)에서 원하는 작업을 수행 할 수 있습니까? –

+0

정확하지는 않습니다. "OrginalClassName-1.0-SNAPSHOT.class"와 같이 jar 파일의 모든 파일의 이름이 바뀌므로 클래스 로더가 해당 파일을 찾지 못합니다. –

답변

5

SBT 조립 0.14.0이 shading 지원을 추가 여기

플러그인을 사용하려면 내 project/plugins.sbt입니다 .

sbt- 어셈블리는 프로젝트 또는 라이브러리 종속성의 클래스를 음영 처리 할 수 ​​있습니다. Jar Jar Links가 지원하는 바이트 코드 변환 (ASM 사용)은 이름이 바뀐 클래스에 대한 참조를 변경하는 데 사용됩니다.

assemblyShadeRules in assembly := Seq(
    ShadeRule.rename("org.apache.commons.io.**" -> "[email protected]").inAll 
) 
-1

나는 크로스 버전 접미사 오류에 완전히 몰두하고 sbt- 어셈블리에서 중복을 제거하는 것과 비슷한 것을 찾고 있습니다.

나는 플러그인 "onejar"발견 할 수 있지만 작동하는지 알려주세요, 전체 년 동안 업데이트되지 않은 : 나는 Proguard와 함께 성공을 거두었습니다 https://github.com/sbt/sbt-onejar

0

sbt-proguard 플러그인을 사용하여. 설정하는 데는 시간이 걸렸지 만, Proguard 기능을 사용하려면 일부 기능을 해제해야했지만 결국에는 내가 원하는 것을 얻었습니다. "java -jar"로 실행할 수있는 단일 항아리, scala가 설치되지 않은 시스템에서도 마찬가지입니다. 그것을 구성하는

resolvers += Resolver.url("sbt-plugin-releases-scalasbt", url("http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns) 

addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2") 

그리고 여기 내 build.sbt 일부 조각을 다음과 같습니다 :

scalaVersion := "2.10.2" 

proguardSettings 

ProguardKeys.options in Proguard += ProguardOptions.keepMain("io.package.my.app.Main") 

ProguardKeys.options in Proguard ++= Seq(
    "-keep class com.sun.xml.wss.impl.misc.XWSSProcessorFactory2_0Impl { *; }", // created dynamically by XWSSProcessorFactory 
    // 
    "-dontshrink", 
    "-dontobfuscate", 
    "-dontoptimize", 
    // 
    // Don't warn is necessary to avoid ProGuard refusing to build the jar. 
    // 
    "-dontwarn com.sun.**", 
    "-dontwarn org.apache.**", 
    "-dontwarn scala.**", 
    // 
    // Don't note just reduces clutter in the build output. If you make changes 
    // to the ProGuard configuration, you might want to remove these temporarily to 
    // help debug the new configuration until it's working correctly. 
    // 
    "-dontnote com.sun.**", 
    "-dontnote org.apache.**", 
    "-dontnote scala.**" 
) 

    //"-printconfiguration /tmp/proguard" 

// Examples of how to filter classes. 
ProguardKeys.inputFilter in Proguard := { file => 
    file.name match { 
    case "classes"         => None 
    case "org.apache.karaf.shell.console-2.3.2.jar" => Some("org/apache/karaf/shell/**,org/apache/felix/gogo/commands/**") 
    case "jline-2.9.jar"       => Some("jline/**") 
    case "org.apache.karaf.jaas.modules-2.3.2.jar" => Some("org/apache/karaf/jaas/modules/**") 
    case "org.apache.karaf.jaas.config-2.3.2.jar" => Some("org/apache/karaf/jaas/config/**") 
    case "org.osgi.compendium-4.3.1.jar"   => Some("!**") 
    case _           => Some("!META-INF/**") 
    } 
} 
관련 문제