Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于其他项目的lib文件夹中的SBT包JAR文件

用于其他项目的lib文件夹中的SBT包JAR文件
EN

Stack Overflow用户
提问于 2017-05-05 14:37:01
回答 1查看 1.5K关注 0票数 1

如何创建一个Jar文件,该文件可以放在lib文件夹中,从而使我能够导入它的类?

我使用SBT package命令从一个sbt项目创建了一个jar文件。

为了查看其内容,我对输出执行了jar -tf myJarFile.jar:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
META-INF/MANIFEST.MF
fileprocs/
fileprocs/util/
fileprocs/util/PathsAndNames.class
fileprocs/Directory.class
fileprocs/util/PathsAndNames$.class
fileprocs/util/CurriedWorkAction.class
fileprocs/util/CurriedWorkAction$.class
fileprocs/Directory$.class

我将jar文件复制到另一个项目的lib文件夹中,在这个文件夹中,您可以看到Apache的jar文件。这些其他jar文件是可扩展的,我可以导入它们的内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.apache.commons.daemon.Daemon;

但是,我的jar文件是不可扩展的,我不能导入它的成员,如果我试图得到未解决的符号错误。我在使用sbt程序集和fat jar一起创建插件时也有类似的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-05 20:01:43

这将不会直接解决您报告的问题,但这是一个解决方法,您可能更喜欢您的原始方法。

首先,在创建jar文件的SBT项目中,您可能需要考虑将其发布到本地常春藤存储库,而不是运行sbt package,然后手动复制结果文件。这实际上非常简单:只需输入命令sbt publishLocal即可。这将打包jar文件,并将jar文件发布到(我猜,从jar文件的内容,并假设jar文件名为bpfm_2.12-1.0.jar):

C:\Users\youraccount\.ivy2\local\fileprocs\bpfm_2.12\1.0\jars\bpfm_2.12.jar

注意:实际的位置可能不同,但并没有那么相关-它将在您的地方常春藤存储库某处,SBT将知道在哪里可以找到它。以上假设您在bpfm jar文件的build.sbt文件中定义了以下属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name := "bpfm"

organization := "fileutils"

version := "1.0"

如果您还在上面的Apache项目中使用SBT,而不是手动将此jar文件复制到lib目录中,则可以将其指定为依赖项。在该项目的SBT build.sbt文件中添加以下行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
libraryDependencies += "fileprocs" %% "bpfm" % "1.0"

当SBT试图解决此依赖时,它将在本地常春藤存储库中找到它。不需要复制任何东西!可以设置IntelliJ来使用SBT来执行您的构建,这意味着它也将自动提取jar文件作为依赖项。更重要的是,如果这个jar文件有它自己的任何依赖项,它们也将在本地常春藤存储库中捕获,因此您将不必担心在任何一个库上复制它们。

实际上,您也可以添加库作为依赖项。将以下行添加到SBT build.sbt文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
libraryDependencies += "commons-daemon" % "commons-daemon" % "1.0.15"

(实际上,您应该只向lib添加无法通过存储库获得的jars。转到 central repository,查找可以作为依赖项包含的工件。)

或者,您可以使用一个属性添加这两个依赖项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
libraryDependencies ++= Seq(
  "commons-daemon" % "commons-daemon" % "1.0.15",
  "fileprocs" %% "bpfm" % "1.0"
)

如果选择这样做,请从项目中删除lib目录及其内容。(还有其他好处:将库引用为依赖关系在git存储库中占用的空间更少,并使合并和分支变得更简单。)

注意事项:只要您不打算将您的任何作品发布到公共存储库,就可以了,因为fileprocs不是一个有效的域名(因此您也不能拥有它)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43814689

复制
相关文章
maven pom文件配置加载lib下的jar包
项目需要引用第三方放在lib的jar,所以需要进行配置,不过最好还是放在公司自己的maven私服里
SmileNicky
2022/05/07
1K0
maven加载lib下的jar包
           <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-compiler-plugin</artifactId>                 <version>3.7.0</version>                 <configuration>                     <source>1.8</source>
似水的流年
2019/12/07
1.2K0
maven工具引入lib下的jar文件
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable><!-- 直接运行,注册服务 -->
JQ实验室
2022/02/10
6770
maven依赖json-lib的jar包导入失败
maven仓库中配置了中央仓库http://central.maven.org/maven2/的镜像,但是json-lib包还是引入失败:
青山师
2023/05/05
7520
maven打包出来的jar包引入的其他jar包版本不是pom文件配置的版本
        项目上使用flyway来管理数据库版本,但是遇到了一件奇怪的事,这件事发生的时间点是springboot从2.3.12升级到2.6.7版本,升级后到底发生了什么,到底是谁引入了flyway 8.0.5版本呢,博主在pom中显示引入的flyway版本为7.1.1,在这个公共jar包里面执行mvn dependency:tree看到的flyway版本也是7.1.1,为什么这个公共jar包被其他项目引入后执行mvn dependency:tree却显示 flyway的版本为8.0.5,而且显示也是由这个公共jar包引入的。
johnhuster的分享
2023/10/16
3260
解决:打包SpringBoot项目成jar包后,其他的项目无法引入jar包中的对象
需求描述 因为最近想把一块东西封装成一个jar包,这样的话,在多个项目中就可以公共了。 就创建了一个SpringBoot项目,去掉了web模块。 遇到的问题 使用maven打包之后,但是其他引入了这个
手撕代码八百里
2020/10/26
2K0
解决SpringBoot jar包中的文件读取问题
SpringBoot微服务已成为业界主流,从开发到部署都非常省时省力,但是最近小明开发时遇到一个问题:在代码中读取资源文件(比如word文档、导出模版等),本地开发时可以正常读取 ,但是,当我们打成jar包发布到服务器后,再次执行程序时就会抛出找不到文件的异常。
程序员小明
2020/08/27
3.2K0
maven打包时打包指定的lib文件夹
然后cmd切换到项目根路径执行打包命令:mvn clean package -Dmaven.test.skip=true
全栈程序员站长
2022/09/02
3.3K0
maven中 引入jar报错:Missing artifact net.sf.json-lib:json-lib:jar:2.4
今天要引入json包,发现报了这个错 Missing artifact net.sf.json-lib:json-lib:jar:2.4 一开始以为是本地仓库从中央仓库下载jar的时间过久的时候,我直接强制终止了,导致从中央仓库下载jar包失败,然后我把本地仓库 net.sf.json-lib:json-lib的文件夹删了,重新导入还是不行
秋白
2019/02/21
3.2K0
maven中 引入jar报错:Missing artifact net.sf.json-lib:json-lib:jar:2.4
包和 jar 文件的创建
在之前的文章中,讲到了面向的 3 大特性(封装、继承、多态)和面向对象设计的 5 大原则(SRP、OCP、LSP、DIP、ISP)。此外,我们还讲了如何创建一个类,并且在创建类后如何构造一个对象。然后还介绍了类中的属性和方法,并对构造方法和引用也做了简单的讲解。
村雨遥
2022/10/28
9020
包和 jar 文件的创建
jar包为什么要放在web-inf的lib下?
为什么jar包一定放在lib文件夹下面,我换个地方就不行。这个其实如果你不是用服务器是没有任何问题的,但是当你使用了web服务器类似于tomcat这种,那么你就要小心了。jar包导入工作空间这个是由我们人为控制的,我导哪个空间就有哪个,我不导行不行,可以,编译器会自动去寻找他所需要的jar包,但是服务器就不会他只会去寻找lib文件夹下的jar包并将他们拷贝到服务器上(就是在你服务器的当前项目的lib文件夹)
wuweixiang
2018/08/14
1.3K0
jar包为什么要放在web-inf的lib下?
android 自己制作Jar包 和 修改 现成的 Jar包文件
先看如何创建自己的 Jar 包 里面随便写个方法 public int add(int a,int b){ return (a+b); } task makeJar(type:
杨奉武
2019/10/03
1.5K0
Roslyn 打包 NuGet 包 BuildTransitive 文件夹用于穿透依赖传递拷贝文件
默认的 PackageReference 可以实现传递依赖,传递依赖的含义是是假定 B 项目安装了 A 库,而 C 项目依赖 B 项目,那么 C 项目将会自然拿到 A 库的 DLL 引用。但默认的 NuGet 包的构建指导文件 targets 命令是不会在传递执行的,也就是如上的 C 项目将不会执行 B 项目安装的 A 库里面的 target 内容 有一些项目需要拷贝自定义文件,例如拷贝图片或者一些 Native 的 DLL 等资源。如 WPF 框架需要拷贝 PenIME 等资源。如果只是在最底层的项目安装了库,那为了让可执行文件项目也输出库的资源,就需要在可执行项目上也安装库。以上的方法的不足在于安装复杂,也许会忘记安装 本文告诉大家一个解决方法是通过在制作库的时候,加上 BuildTransitive 文件夹,在此文件夹内添加构建指导文件,此时这个构建指导文件 targets 文件里面的命令将会在传递中执行,也就是说只需要在底层的项目安装即可,不需要在可执行项目上也安装库
林德熙
2021/12/24
7250
为什么SpringBoot jar包中的文件读取不到?
菜菜同学每天的工作便是与三方对接,而且这次的任务是接入 N 套证书相关配置文件。考虑到后期易于上线,于是菜菜开启了从硬编码到易维护的代码优化之路。
一猿小讲
2021/10/08
1.4K0
python引入其他文件夹里的py文件的方法
在写python框架的时候,经常会用到引入其他文件夹里的python文件,要是都在同目录下的还好,直接import就好了,可是有的不在同一个目录,很多初学者就发现直接import报错了 1.如果是同目录下的引入
matinal
2023/10/13
8080
python引入其他文件夹里的py文件的方法
Intellij idea打带Manifest文件的jar包(可执行jar包)
老版本Intellij idea可以很方便地打带Manifest文件的jar包,也就是可行性的Jar包。今天使用新版的Intellij idea打jar包时遇到了坑,jar包中竟然没有MANIFEST文件。
程裕强
2019/05/27
4.8K0
根据包名查找 Jar 包文件
很多时候,我们需要根据包名来查找一些依赖所在的jar包,比如我们想要查找com.alipay这个包及其文件所在的jar包。
技术小黑屋
2020/01/19
2.3K0
Linux怎么复制文件到其他文件夹
本文主要讲解linux怎么复制文件到其他文件夹。 在Linux和Unix系统上工作时,复制文件和目录是您每天要执行的最常见任务之一。 cp是一个命令行实用程序,用于复制Unix和Linux系统上的文件和目录。在本文中,我们将解释如何使用cp命令。
狼啸风云
2021/04/13
15.8K0
操作 PDF 文件的常用JAR包
iText 5是最早一个提供对PDF进行操作的JAR包,不过目前该JAR已经不再进行后续开发。可以从官网看到如下一段话:
BUG弄潮儿
2020/12/02
2.6K0
获取当前jar包路径_java获取jar文件
获取classpath的路径,若没有其他依赖,在cmd下运行该可执行jar包,则该值即为该jar包的绝对路径。代码如下:
全栈程序员站长
2022/11/10
7.5K0

相似问题

用于在sbt 0.11.2中创建独立jar的sbt包

30

sbt包:排除JAR文件中的Python文件

14

从ant lib/jar文件夹创建Maven依赖项

12

linux中用于运行jar的lib文件夹的位置

17

Struts文件上载不适用于lib文件夹中的jar文件

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文