복붙노트

[SCALA] 어떻게 로컬 받는다는 프록시 저장소 (넥서스)를 사용하는 SBT받을 수 있나요?

SCALA

어떻게 로컬 받는다는 프록시 저장소 (넥서스)를 사용하는 SBT받을 수 있나요?

저는 현재 웹에서 아티팩트를 끌어 내리는 SBT (스칼라) 프로젝트를 가지고있다. 우리는 유물을 캐시 할 기업 표준화 넥서스 저장소쪽으로 이동하고 싶습니다. 넥서스 문서에서, 나는 메이븐 프로젝트를 위해이 작업을 수행하는 방법을 알고 있습니다. 그러나 SBT는 분명히 다른 접근 방법을 사용합니다. (나는 아이비가 어떻게 든 관련되어 이해하지만, 나는 그것을 사용한 적이 어떻게 작동하는지 이해하지 않습니다.)

어떻게 SBT을 알 수 있습니까 및 / 또는 아이비 모든 종속성을 기업 넥서스 저장소 시스템을 사용하는 기본? 나는 우리의 소스 저장소의 새로운 복제가 자동으로 프록시를 사용하므로, 프로젝트 수준 구성 파일의 일종을 사용하는 대답을하고 싶습니다. (즉, 점 디렉토리에서 사용자 별 설정 파일에 대한 일 처리하는 것은 실용적되지 않습니다.)

감사!

해결법

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

    1.1 단계 : 프록시 저장소, 내가 아래에 요약 및 추가 정보 : 상세 항목의 지침을 따르십시오 :

    1 단계 : 프록시 저장소, 내가 아래에 요약 및 추가 정보 : 상세 항목의 지침을 따르십시오 :

    SBT의 이전 버전을 사용하는 사람들을 위해 좋은 소식에도 SBT 0.12.0 런처 항아리에 적어도 오래된 SBT 버전의 부트 등록 정보 파일은 필요한 라인 (찾아 repository.config를 언급 한)을 포함하지 않는, 그것을 아직도 당신이 필요한 줄을 추가하기 위해 해당 파일을 편집하는 경우 SBT의 해당 버전을 위해 작동하고, SBT 0.12.0 런처 단지로 재 포장합니다! 이 기능이없는 SBT 자체, 런처에서 구현되기 때문입니다. 그리고 SBT 0.12.0 실행은 0.7 바로 다시 SBT의 모든 버전을 출시 할 수 있도록 주장!

    2 단계 : 확인 외부 저장소를 사용하지 않을 수 있도록하여 해결 프로그램에서 기본 저장소를 제거하려면. 이 두 가지 방법 중 하나를 수행 할 수 있습니다 :

  2. ==============================

    2.좋아, SBT 메일 링리스트에 표시하라의 도움으로, 나는 작동하는 대답이있다.

    좋아, SBT 메일 링리스트에 표시하라의 도움으로, 나는 작동하는 대답이있다.

    내 빌드 클래스는 이제 다음 (및 기타의 repos)과 같다 :

    import sbt._
    
    //By extending DefaultWebProject, we get Jetty support
    class OurApplication(info: ProjectInfo) extends DefaultWebProject(info) {
    
      // This skips adding the default repositories and only uses the ones you added
      // explicitly. --Mark Harrah
      override def repositories = Set("OurNexus" at "http://our.nexus.server:9001/nexus/content/groups/public/") 
      override def ivyRepositories = Seq(Resolver.defaultLocal(None)) ++ repositories
    
      /* Squeryl */
      val squeryl = "org.squeryl" % "squeryl_2.8.0.RC3" % "0.9.4beta5"
    
      /* DATE4J */
      val date4j = "hirondelle.date4j" % "date4j" % "1.0" from "http://www.date4j.net/date4j.jar"
    
      // etc
    }
    

    나는 내 컴퓨터의 .ivy2 / 캐시 디렉토리에서 Squeryl 트리를 삭제하면 이제, SBT는 해당 URL과 넥서스 트리에서 잡아하려고합니다. 문제 해결됨!

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

    3.당신이 필요로 당신을 허용하는 등록 정보 파일 sbt.boot.properties을 정의하는 것입니다 :

    당신이 필요로 당신을 허용하는 등록 정보 파일 sbt.boot.properties을 정의하는 것입니다 :

        C:\HOMEWARE\apps\sbt-0.74\sbt.boot.properties
    
        [scala]
          version: 2.7.7
        #  classifiers: sources, javadoc
    
        [app]
          org: org.scala-tools.sbt
          name: sbt
          version: read(sbt.version)
          class: sbt.xMain
          components: xsbti
          cross-versioned: true
          classifiers: sources, javadoc
    
        [repositories]
          local
          my-nexus: http://my.nexus/nexus/content/repositories/scala-tools/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
          maven-local
        #  sbt-db: http://databinder.net/repo/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
        #  maven-central
        #  scala-tools-releases
        #  scala-tools-snapshots
    
        [boot]
         directory: project/boot
         properties: project/build.properties
         prompt-create: Project does not exist, create new project?
         prompt-fill: true
         quick-option: true
    
        [log]
         level: debug
    
        [app-properties]
         project.name: quick=set(test), new=prompt(Name)[p], fill=prompt(Name)
         project.organization: new=prompt(Organization)[org.vonc]
         project.version: quick=set(1.0), new=prompt(Version)[1.0], fill=prompt(Version)[1.0]
         build.scala.versions: quick=set(2.8.0.RC2), new=prompt(Scala version)[2.8.0.RC2], fill=prompt(Scala version)[2.8.0.RC2]
         sbt.version: quick=set(0.7.4), new=prompt(sbt version)[0.7.4], fill=prompt(sbt version)[0.7.4]
         project.scratch: quick=set(true)
         project.initialize: quick=set(true), new=set(true)
    
        [ivy]
         cache-directory: C:\HOMEWARE\projects\.ivy2\cache
    

    참고 :이에서 영감 파일을 sbt.boot.properties :

    나는 외부 메이븐 저장소 정의를 주석, 내 자신의 넥서스 메이븐의 repo에 대한 참조를 추가했습니다.

    (같은 당신의 sbt.boot.properties를 지정해야하기 위해)을 sbt.bat 래퍼를 정의합니다 :

    C:\HOMEWARE>more C:\HOMEWARE\bin\sbt.BAT
    @echo off
    set t=%~dp0
    set adp0=%t:C:\="%"
    
    set SBT_DIR=%adp0%..\apps\sbt-0.74
    dir C:\%SBT_DIR%\sbt-launch-0.7.4.jar
    # if needed, add your proxy settings
    set PROXY_OPTIONS=-Dhttp.proxyHost=my.proxy -Dhttp.proxyPort=80xx -Dhttp.proxyUser=auser -Dhttp.proxyPassword=yyyy
    set JAVA_OPTIONS=-XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m -Xmx512M -cp C:\HOMEWARE\apps\sbt-0.74\sbt-launch-0.7.4
    set SBT_BOOT_PROPERTIES=-Dsbt.boot.properties="sbt.boot.properties"
    cmd /C C:\HOMEWARE\apps\jdk4eclipse\bin\java.exe %PROXY_OPTIONS% %JAVA_OPTIONS% %SBT_BOOT_PROPERTIES% -jar C:\HOMEWARE\apps\sbt-0.74\sbt-launch-0.7.4.jar %*
    

    그리고 당신의 SBT는 유물 만에서 다운로드합니다 :

    그냥 내가 실행 한 오래된 넥서스 오픈 소스 1.6, 자바 1.6, sbt07.4 집에서 테스트

    C:\Prog\Java\jdk1.6.0_18\jre\bin\java  -Xmx512M -Dsbt.boot.properties=sbt.boot.properties - jar "c:\Prog\Scala\sbt\sbt-launch-0.7.4.jar"  
    

    즉 있습니다 :

    [success] Build completed successfully.
    C:\Prog\Scala\tests\pp>sbt
    Getting Scala 2.8.0 ...
    downloading http://localhost:8081/nexus/content/repositories/scala/org/scala-lang/scala-compiler/2.8.0/scala-compiler-2.
    8.0.jar ...
            [SUCCESSFUL ] org.scala-lang#scala-compiler;2.8.0!scala-compiler.jar (311ms)
    downloading http://localhost:8081/nexus/content/repositories/scala/org/scala-lang/scala-library/2.8.0/scala-library-2.8.
    0.jar ...
            [SUCCESSFUL ] org.scala-lang#scala-library;2.8.0!scala-library.jar (185ms)
    :: retrieving :: org.scala-tools.sbt#boot-scala
            confs: [default]
            2 artifacts copied, 0 already retrieved (14484kB/167ms)
    [info] Building project test 0.1 against Scala 2.8.0
    [info]    using sbt.DefaultProject with sbt 0.7.4 and Scala 2.7.7
    

    나는 sbt.boot.properties 파일에서 재미있는 값을 시도하는 경우 :

    C:\Prog\Scala\tests\pp>sbt
    Getting Scala 2.9.7 ...
    
    :: problems summary ::
    :::: WARNINGS
                    module not found: org.scala-lang#scala-compiler;2.9.7
            ==== nexus: tried
              http://localhost:8081/nexus/content/repositories/scala/org/scala-lang/scala-compiler/2.9.7/scala-compiler-2.9.7.pom
              -- artifact org.scala-lang#scala-compiler;2.9.7!scala-compiler.jar:
              http://localhost:8081/nexus/content/repositories/scala/org/scala-lang/scala-compiler/2.9.7/scala-compiler-2.9.7.jar
    

    그래서 내가 정의 된 두 REPO에 자신을 제한하지 :

    [repositories]
    nexus:  http://localhost:8081/nexus/content/repositories/scala
    nexus2: http://localhost:8081/nexus/content/repositories/scala, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
    

    (나는 다른 모든 댓글을 달았습니다 : 지역, 받는다는 - 지역, ...)

    나는 모든 저장소를 언급하고 sbt.boot.properties에서 스칼라 버전에 대한 재미있는 값 (2.7.9)을 넣으면, 내가 어떻게해야합니까 (방공호처럼)

    C:\Prog\Scala\tests\pp>sbt
    Error during sbt execution: No repositories defined.
    

    (여전히 환매 특약이 주석하면서) 나는 2.7.7를 넣으면, 그래, 그것은 오류를 생성하지 않습니다 :

    C:\Prog\Scala\tests\pp>sbt
    [info] Building project test 0.1 against Scala 2.8.0
    [info]    using sbt.DefaultProject with sbt 0.7.4 and Scala 2.7.7
    

    이미 내 이전 시도하는 동안 scala2.8.0을 다운로드했기 때문에 그러나 그것은 단지입니다. 내 프로젝트 / boot 디렉토리에서 해당 라이브러리를 제거하면 다음 예외가 발생합니다 :

    [info]    using sbt.DefaultProject with sbt 0.7.4 and Scala 2.7.7
    > C:\Prog\Scala\tests\pp>sbt
    Error during sbt execution: No repositories defined.
            at xsbt.boot.Pre$.error(Pre.scala:18)
            at xsbt.boot.Update.addResolvers(Update.scala:197)
    ...
            at xsbt.boot.Boot$.main(Boot.scala:15)
            at xsbt.boot.Boot.main(Boot.scala)
    Error loading project: Error during sbt execution: No repositories defined.
    
  4. ==============================

    4.sbt_home / conf의 "sbtconfig.txt"의 설정 파일을 편집

    sbt_home / conf의 "sbtconfig.txt"의 설정 파일을 편집

    두 줄을 추가

    -Dsbt.override.build.repos=true
    -Dsbt.repository.config="C:/Program Files (x86)/sbt/conf/repo.properties"
    

    repo.properties 내용은

    [repositories]
        local
        public: http://222.vvfox.com/public  <-fix this ,write your local nexus group url
    
  5. ==============================

    5.그럼이 잠시 동안 저를 도청했다 그래서 지금 당신이해야 할 모든 당신의 플러그인 프로젝트에 포함하고 maven.MavenDependencies와 프로젝트 믹스 인을 IS-SBT 받는다는 GitHub의 호출에 받는다는에 대한 SBT 플러그인을 쓴 사람을 발견 귀하의 모든 갱신 등의 운영 및 게시 로컬 작업을 지역 받는다는와 함께. 그것에 대해 좋은 점은 당신이 저 같이 인 경우에, 당신의 조직은 모든 ​​받는다는입니다. 그래서, 모든 당신 libs와는 지역 받는다는의 repo에 있지만 어떤 이유로 당신이 첫번째 SBT와 함께 구축 할 경우, 당신은 너무 담쟁이 덩굴의 무리 또는 항아리를 받고 시작합니다. 당신부터 공간의 낭비, 시간은 여전히 ​​받는다는 빌드를 위해 그들을 얻을해야합니다.

    그럼이 잠시 동안 저를 도청했다 그래서 지금 당신이해야 할 모든 당신의 플러그인 프로젝트에 포함하고 maven.MavenDependencies와 프로젝트 믹스 인을 IS-SBT 받는다는 GitHub의 호출에 받는다는에 대한 SBT 플러그인을 쓴 사람을 발견 귀하의 모든 갱신 등의 운영 및 게시 로컬 작업을 지역 받는다는와 함께. 그것에 대해 좋은 점은 당신이 저 같이 인 경우에, 당신의 조직은 모든 ​​받는다는입니다. 그래서, 모든 당신 libs와는 지역 받는다는의 repo에 있지만 어떤 이유로 당신이 첫번째 SBT와 함께 구축 할 경우, 당신은 너무 담쟁이 덩굴의 무리 또는 항아리를 받고 시작합니다. 당신부터 공간의 낭비, 시간은 여전히 ​​받는다는 빌드를 위해 그들을 얻을해야합니다.

    즉 내가 모든 프로젝트에 추가 할 필요가 없습니다 것입니다, 그래서이 SBT에 내장 된하고자했다. 어쩌면 프로세서 적어도. 그는 내가 그가 0.9에 추가하고 싶습니다하지만 난 그것을 찾을 수 없어 읽었 한 가지 언급.

  6. ==============================

    6.내가 ~ / .sbt / 저장소에 빈 파일을했기 때문에 나는이 오류가 발생했습니다. 파일에 저장소를 추가하고 파일을 제거하는 두 가지 문제를 해결했다.

    내가 ~ / .sbt / 저장소에 빈 파일을했기 때문에 나는이 오류가 발생했습니다. 파일에 저장소를 추가하고 파일을 제거하는 두 가지 문제를 해결했다.

  7. from https://stackoverflow.com/questions/3770125/how-do-i-get-sbt-to-use-a-local-maven-proxy-repository-nexus by cc-by-sa and MIT license