如何将JAR包加入到项目的库中引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将JAR包加入到项目的库中引用相关的知识,希望对你有一定的参考价值。

那个地址连接无法连接了所以只有问大虾喇,是用什么软件引用库到Eclipse中,因为那四个JAR包是独立的,我看他这里是已经用JAR打包了四个JAR包合在一起,是不是我也要先打包成四个JAVA包然后再构建JAVA路径加入JAR包?还有就是如果知道了是哪个软件的设置,能不能告诉我怎样导入?》

你可以这个!1:右击项目——属性——Java构建路径——库——添加外部JAR——浏览到你所要添加的Jar包!2:把你要添加的Jar包复制到项目里的lib文件夹里也可以! 参考技术A 先把包 考到lib下,在选择项目右键属性,选择添加库,选中你拷贝的包 就可以了 参考技术B 直接把jar包拷贝到你的项目的lib目录下就可以。 参考技术C 如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>$project.build.directory/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>theMainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>

如何将jar发布到本地存储库?

【中文标题】如何将jar发布到本地存储库?【英文标题】:How to publish jar to local repository? 【发布时间】:2011-12-09 13:42:00 【问题描述】:

我有一个编译成 jar(不是 sbt 项目,没有源代码,只是 jar 文件)的库,但在存储库中不可用。

有没有办法在本地发布 jar,以便我可以使用 libraryDependencies += "org.xxx" % "xxx" % "1.0" 表示法添加依赖项? (我已经知道如何通过将文件复制到lib 文件夹来将文件添加到项目中。)

【问题讨论】:

这是一个非常有趣的问题,因为我几乎没有看到不需要项目的任务(about 除外)。可以想到一个插件,您将在全球范围内注册并使用它将 jars 发布到本地 Ivy 存储库。我知道没有插件可以做到这一点。 【参考方案1】:

publishLocal 操作用于将您的项目发布到本地 Ivy 存储库。默认情况下,此本地存储库位于 $user.home/.ivy2/local。然后就可以在同一台机器上的其他项目中使用这个项目source

编辑:对不起,我误读了您的问题。这是一个example,用于将 jar 或源发布到您当地的常春藤仓库。

【讨论】:

对,但这不是一个项目,它是一个 jar 文件。我该怎么做? 在更新的 sbt 版本中,这是 publishLocal 而不是 publish-local: scala-sbt.org/release/docs/Publishing.html【参考方案2】:

tl;dr 我认为这是一种技巧,而不是 sbt 的功能。您已收到警告。

假设您要发布 file.jar。对于 任何 构建工具,包括 sbt,它执行的任务最终会从项目文件中创建一个工件 - 在大多数情况下是一个 jar 文件。

项目为工件设置坐标

诀窍是利用 sbt 为要发布的 jar 设置 环境(= 坐标)所需的东西(否则您必须指定它们在可能对用户友好也可能不太友好的命令行上)。

使用必要的设置创建一个build.sbt - organizationnameversion 和可能的scalaVersion - 并将其保存在 jar 文件所在的位置。

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 现在编写一个插件来使用命令行中指定的坐标来做这件事应该很容易了。

【讨论】:

这对我有用。我确实必须放弃_$scalaBinaryVersion.value 才能实现我的特定目标,否则这就是解决方案。 是的,对于不需要 Scala 版本的 Java JAR,您可以设置 crossPaths := false 将其删除 - 但这应该只用于本地构建,当 Scala 二进制兼容性不是问题。 这种方式对我有用,但任何人都可以建议如何将它扩展到多个 jars?谢谢【参考方案3】:

假设您有 wetElephant.jarwetElephant-javadoc.jar 文件,您希望将它们发布到本地存储库并使用 libraryDependencies sbt taskKey 从另一个项目中引用它.

这是你需要做的。

    将您的库(wetElephant.jarwetElephant-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"
      )
    

    从 sbt/activator 调用 publishLocal 任务(我是从 activator 调用的,并在它前面加上项目名称):

    ./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

    可选择在另一个项目中使用这些库

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

免责声明:我不知道如何不发布资源......

【讨论】:

这不起作用。 scala 版本始终为 2.10,版本始终为 0.1.snapshot。【参考方案4】:

这是几个月前我将 sbt 工件推送到 maven 存储库(本地和远程)的一篇博文。

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

【讨论】:

谢谢,但我已经知道如何将 sbt 项目发布到我的本地存储库。我要问的是如何将一个现有的 jar 文件添加到我的本地存储库中。你知道怎么做吗?【参考方案5】:

试试这个:

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

【讨论】:

-1,maven与这个问题无关,虽然不是你的错OP在这个问题上添加了“maven”标签。 哈哈虽然不是你的错,所以-1。他有一个他需要的jar文件在一个repository里,maven就是一个repository。 @cbmanica Roy 在这里是正确的。我赞成取消你被误导的反对票。【参考方案6】:

我在这里创建了一个示例 Play Framework/sbt 项目,它创建了一个本地存储库(不仅仅是publish-local):https://github.com/muymoo/local-ivy-repo-sbt 具体看Build.scala

makeLocalRepoSettings(publishedProjects):_*

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

这些 localRepoArtifacts 可以在我的本地 ivy 存储库中找到,但我认为您可以编辑它以使用普通的旧 jar 文件。

运行:play local-repository-created

这是https://github.com/sbt/sbt-remote-control 的更简单版本,在Build.scala 中做了更多的事情。

【讨论】:

以上是关于如何将JAR包加入到项目的库中引用的主要内容,如果未能解决你的问题,请参考以下文章

如何导出项目pom中引用的mavenjar包

如何把maven引用的jar包放入lib下面呐

如何将jar包加入到Maven本地仓库

请问,maven项目发布为jar到私服,其他项目如何引用内部依赖?

怎样把本地的jar包引入到maven工程里面

如何将jar发布到本地存储库?