我有一个库编译成一个jar(不是sbt项目,没有源代码,只是jar文件),它在存储库中不可用.
有没有办法在本地发布jar,所以我可以使用libraryDependencies += "org.xxx" % "xxx" % "1.0"符号添加依赖项 ?(我已经知道如何通过将文件复制到lib文件夹来将文件添加到项目中.)
Jac*_*ski 32
tl; dr我称之为技巧而非sbt的特征.你被警告过了.
假设您必须file.jar发布.与任何构建工具一样,sbt包括,执行最终在项目中的文件中创建工件(大多数情况下是jar文件)的任务.
该项目设置工件的坐标.
诀窍是利用sbt所需的内容来设置要发布的jar 的环境(= 坐标)(否则你必须在命令行上指定它们,这可能是用户友好的,也可能不是用户友好的).
创建build.sbt必要的设置- ,,organization 和可能的-并保存其中的jar文件.nameversionscalaVersion
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")
Run Code Online (Sandbox Code Playgroud)
您可能已经注意到,构建更改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.jar文件的一些第三方库,并要发布到本地回购和使用来自另一个项目referrence它对应的javadoc libraryDependenciesSBT taskKey.
这是你需要做的.
wetElephant.jar和wetElephant-javadoc.jar)放进去modules\wetElephant在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"
)
Run Code Online (Sandbox Code Playgroud)publishLocal从sbt/activator 调用任务(我是从activator做的,并以proejct名称作为前缀):
./activator wetElephant/publishLocal
Run Code Online (Sandbox Code Playgroud)...并阅读输出以查看发布的内容和位置:
/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
Run Code Online (Sandbox Code Playgroud)
可选择在另一个项目中使用这些库
libraryDependencies += "com.stolenLibs" % "wetElephant" % "0.1-IDontKnow"
Run Code Online (Sandbox Code Playgroud)免责声明:我不知道如何发布消息来源......
尝试这个:
http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
| 归档时间: |
|
| 查看次数: |
48357 次 |
| 最近记录: |