ProgramingTip

jar를 로컬 저장소에 게시하는 방법은 무엇입니까?

bestdevel 2020. 12. 12. 12:12
반응형

jar를 로컬 저장소에 게시하는 방법은 무엇입니까?


저장소에서 사용할 수없는 jar (sbt 프로젝트가 아니라 소스 코드, jar 파일 만)로 사용할 수있는 라이브러리가 있습니다.

libraryDependencies += "org.xxx" % "xxx" % "1.0"표기법을 사용하여 추가 할 수있는 항아리를 로컬로 게시하는 방법이 있습니까? (파일을 lib폴더 에 복사하여 프로젝트에 추가하는 방법을 이미 알고 있습니다 .)


** publishLocal ** 작업은 프로젝트를 로컬 Ivy 저장소에 게시하는 데 사용됩니다. 기본적 으로이 로컬 저장소는 $ {user.home} /. ivy2 / 지역에 있습니다. 그런 다음 머신 머신 소스 의 다른 프로젝트 에서이 프로젝트를 사용할 수 있습니다.

편집 : 죄송합니다. 질문을 잘못 읽었습니다. 다음은 로컬 아이비 저장소에 항아리 또는 소스를 게시 하는 입니다.


tl; dr 나는 그것을 sbt의 기능이 아닌 트릭이라고 부를 것입니다. 경고를 그리스도.

file.jar게시해야 할 가정 해 보겠습니다 . sbt를 포함하는 모든 빌드 파일과 마침 프로젝트의 파일에서 결과적으로 아티팩트 (대부분의 경우 jar)를 생성하는 작업을 실행합니다.

프로젝트는 아티팩트 의 좌표설정 합니다 .

트릭은 sbt가 게시 할 jar 의 환경 (= 좌표 ) 을 설정하는 필요한 것을 활용하는 것입니다 (그렇지 사용자가없는 일 수도 있고 수도있는 명령 줄에서 지정해야합니다).

만들기 build.sbt필요한 설정으로 - organization, name, version그리고 아마도 scalaVersion-과 저장 항아리 파일입니다.

organization := "org.abc"

name := "my-own-publish-jar"

version := "1.0.0"

scalaVersion := "2.11.3"

packageBin in Compile := file(s"${name.value}_${scalaBinaryVersion.value}.jar")

빌드 compile:package가 jar 파일을 가리 키도록 작업을 변경하는 것을 눈치 채 입니다.

그게 다야.

실행 sbt publishLocal하고 jar 파일은 Ivy2 로컬 저장소, 즉 ~/.ivy2/local/org.abc/my-own-publish-jar_2.11/1.0.0/jars/my-own-publish-jar_2.11.jar.

protip 명령 줄에 지정된 좌표로 작성하는 것이 좋습니다.


하자 당신이 가지고있는 파일 wetElephant.jar및 일부 wetElephant-javadoc.jar3 자 라이브러리와 로컬의 저장소에 게시하여 다른 프로젝트에서 그것을 참조 할 대응의 javadoc libraryDependenciesSBT taskKey를 .

수행해야 할 작업은 다음과 가변합니다.

  1. 라이브러리 ( wetElephant.jarwetElephant-javadoc.jar)를modules\wetElephant
  2. build.sbt 파일 (또는 Build.scala 파일) 에서 프로젝트 정의

    lazy val stolenLib = project
      .in(file("modules/wetElephant"))
      .settings(
        organization              := "com.stolenLibs",
        name                      := "wetElephant",
        version                   := "0.1-IDonKnow",
        crossPaths                := false,  //don't add scala version to this artifacts in repo
        publishMavenStyle         := true,
        autoScalaLibrary          := false,  //don't attach scala libs as dependencies
        description               := "project for publishing dependency to maven repo, use 'sbt publishLocal' to install it",
        packageBin in Compile     := baseDirectory.value / s"${name.value}.jar",
        packageDoc in Compile     := baseDirectory.value / s"${name.value}-javadoc.jar"
      )
    
  3. publishLocalsbt / activator에서 작업을 호출합니다 (activator에서 작업을 수행하고 proejct 이름으로 접두사를 붙였습니다).

    ./activator wetElephant/publishLocal                   
    

... 출력을 읽고 게시 된 내용과 위치를 확인합니다.

    /cygdrive/d/devstation-workspace/projects/m4l-patches 1
      [info] Loading project definition from D:\devstation-workspace\projects\m4l-patches\project
      [info] Set current project to m4l-patches (in build file:/D:/devstation-workspace/projects/m4l-patches/)
      [info] Updating {file:/D:/devstation-workspace/projects/m4l-patches/}wetElephant...
    [info] Packaging D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\wetelephant-0.1-IDonKnow-sources.jar ...
    [info] Done packaging.
    [info] Wrote D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\wetelephant-0.1-IDonKnow.pom
      [info] Resolving org.fusesource.jansi#jansi;1.4 ...4 ....
    [info] Done updating.
    [info] :: delivering :: com.stolenLibs#wetelephant;0.1-IDonKnow :: 0.1-IDonKnow :: release :: Sun Dec 20 20:09:24 CET 2015
      [info]  delivering ivy file to D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\ivy-0.1-IDonKnow.xml
      [info]  published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\poms\wetelephant.pom
      [info]  published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\jars\wetelephant.jar
      [info]  published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\srcs\wetelephant-sources.jar
      [info]  published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\docs\wetelephant-javadoc.jar
      [info]  published ivy to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\ivys\ivy.xml
      [success] Total time: 1 s, completed 2015-12-20 20:09:24
  1. 선택적으로 다른 프로젝트에서 기존 라이브러리 사용

    libraryDependencies += "com.stolenLibs" % "wetElephant" % "0.1-IDontKnow"
    

면책 조항 : 출처를 게시하지 않는 방법을 모르겠습니다 ...


다음은 몇 달 전에 sbt 아티팩트를 maven 저장소 (로컬 및 원격)에 푸시하기 위해 팔로우 한 블로그 게시물입니다.

http://brizzled.clapper.org/id/100/


이 시도 :

http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html


publish-local여기에 로컬 저장소 (뿐 아니라 ) 를 만드는 것으로 Play Framework / sbt 프로젝트를 만들었습니다 . https://github.com/muymoo/local-ivy-repo-sbt 자동으로 사용합니다.Build.scala

makeLocalRepoSettings(publishedProjects):_*

localRepoArtifacts += "org.apache.ws.security" % "wss4j" % "1.6.9"

이것들 localRepoArtifacts은 내 로컬 ivy repo에서 발견되지만 평범한 오래된 jar 파일로도 작동하도록 이것을 편집 할 수 있다고 생각합니다.

실행하려면 : play local-repository-created

그것은의 간단한 버전입니다 https://github.com/sbt/sbt-remote-control 자신에 훨씬 더 않습니다 Build.scala.

참고 URL : https://stackoverflow.com/questions/7798767/how-to-publish-jar-to-local-repository

반응형