복붙노트

[SCALA] 간단한 빌드 도구를 사용하여 독립 실행 형 항아리 만들기

SCALA

간단한 빌드 도구를 사용하여 독립 실행 형 항아리 만들기

이 독립형 그래서 SBT는 기본 패키지에 필요한 모든 라이브러리 (스칼라 - library.jar)를 패키지로 말할 수있는 방법이 있나요? (공전?)

해결법

  1. ==============================

    1.편집 : 2011 그 이후로, (2010 년에이 페이지 뒤쪽에 답변을 게시) retronym가 만든이 SBT-플러그인 "SBT-onejar"지금 SBT 0.12 업데이트 문서와 GitHub의에 새로운 주소입니다.

    편집 : 2011 그 이후로, (2010 년에이 페이지 뒤쪽에 답변을 게시) retronym가 만든이 SBT-플러그인 "SBT-onejar"지금 SBT 0.12 업데이트 문서와 GitHub의에 새로운 주소입니다.

    원래 답 :

    직접이 SBT (이하 "패키지"SBT 작용의 모델 후 맞춤 동작)없이 연장 가능하지 않다.

    GitHub의 사용자 정의 부두 배포를 위해 만든 조립 작업을 언급하고있다. 당신은 당신이 필요하지만 그것을 적용 할 수있다.

    코드는 (이 게시물 및 사용자 리오에서) 매우 일반적인 것입니다 :

     project / build / AssemblyProject.scala
    
     import sbt._
    
     trait AssemblyProject extends BasicScalaProject
     {
             def assemblyExclude(base: PathFinder) = base / "META-INF" ** "*"
             def assemblyOutputPath = outputPath / assemblyJarName
             def assemblyJarName = artifactID + "-assembly-" + version + ".jar"
             def assemblyTemporaryPath = outputPath / "assembly-libs"
             def assemblyClasspath = runClasspath
             def assemblyExtraJars = mainDependencies.scalaJars
    
             def assemblyPaths(tempDir: Path, classpath: PathFinder, extraJars: PathFinder, exclude: PathFinder => PathFinder) =
             {
                     val (libs, directories) = classpath.get.toList.partition(ClasspathUtilities.isArchive)
                     for(jar <- extraJars.get ++ libs) FileUtilities.unzip(jar, tempDir, log).left.foreach(error)
                     val base = (Path.lazyPathFinder(tempDir :: directories) ##)
                     (descendents(base, "*") --- exclude(base)).get
             }
    
             lazy val assembly = assemblyTask(assemblyTemporaryPath, assemblyClasspath, assemblyExtraJars, assemblyExclude) dependsOn(compile)
             def assemblyTask(tempDir: Path, classpath: PathFinder, extraJars: PathFinder, exclude: PathFinder => PathFinder) =
                     packageTask(Path.lazyPathFinder(assemblyPaths(tempDir, classpath, extraJars, exclude)), assemblyOutputPath, packageOptions)
     }
    
  2. ==============================

    2.그것은 약간의 작업이 필요하지만 당신은 또한 독립형 JAR를 만들 SBT 내에서 Proguard와 사용할 수 있습니다.

    그것은 약간의 작업이 필요하지만 당신은 또한 독립형 JAR를 만들 SBT 내에서 Proguard와 사용할 수 있습니다.

    나는 Scalala에 대한 SBT 빌드에서 최근에 이런 짓을.

  3. ==============================

    3.위의 제공 @retronym 무엇 떨어져 근무, 나는 SBT와 함께 Proguard와를 사용하여 스칼라 라이브러리를 포함하는 독립형 항아리 (즉 스칼라 - library.jar)를 기반으로 간단한 예제를 만들었습니다. 감사합니다, retronym.

    위의 제공 @retronym 무엇 떨어져 근무, 나는 SBT와 함께 Proguard와를 사용하여 스칼라 라이브러리를 포함하는 독립형 항아리 (즉 스칼라 - library.jar)를 기반으로 간단한 예제를 만들었습니다. 감사합니다, retronym.

  4. ==============================

    4.SBT 어셈블리를 사용하는 가장 간단한 예

    SBT 어셈블리를 사용하는 가장 간단한 예

  5. ==============================

    5.가장 간단한 방법은 바로 명령 줄에서 항아리를 만드는 것입니다. 이 작업을 수행하는 방법을 모르는 경우 내가보기 엔 당신이 그렇게하는 것이 좋습니다 것입니다. 자동화 유용합니다,하지만 훨씬 더 당신은 자동화가 무엇을하고 있는지 알고있는 경우.

    가장 간단한 방법은 바로 명령 줄에서 항아리를 만드는 것입니다. 이 작업을 수행하는 방법을 모르는 경우 내가보기 엔 당신이 그렇게하는 것이 좋습니다 것입니다. 자동화 유용합니다,하지만 훨씬 더 당신은 자동화가 무엇을하고 있는지 알고있는 경우.

    실행 가능한 단지의 생성을 자동화하는 가장 쉬운 방법은 Windows에서 bash는 스크립트 또는 배치 스크립트를 사용하는 것입니다.

    SBT에서 가장 간단한 방법은 자원 디렉토리에 필요한 스칼라 라이브러리를 추가하는 단지입니다 :

    unmanagedResourceDirectories in Compile := Seq(file("/sdat/bins/ScalaCurrent/lib/scalaClasses"))
    

    내 환경 ScalaCurrent 그렇게하면 현재 스칼라 라이브러리에 대한 링크입니다. 글을 쓰는 시점에서 2.11.4. 핵심은 내가 스칼라 라이브러리를 추출하지만, ScalaClassses 디렉토리 내부에 배치한다는 것입니다. 각 추출 된 라이브러리의 요구는 최상위 디렉토리로 이동합니다.

  6. from https://stackoverflow.com/questions/2887655/making-stand-alone-jar-with-simple-build-tool by cc-by-sa and MIT license