由于要加密敏感数据,因此整个平台都用于使用加密工具,因此将加密代码项放入JAR软件包中。它非常简单,但是我也遇到了一些问题。该项目中遇到的以下共享问题和经验以及项目包装
1)项目包装
IDEA项目包装非常简单,只需执行MVN清洁MVN安装即可,或者您可以手动执行它
执行后,打包后检查数据包文件
成功包装!
2)项目依赖性
成功的包装仅仅是开始。实际上,JAR软件包应注意一些问题,因为许多项目都引入了JAR软件包,并且JAR软件包项目本身也将引入一些依赖关系。如果您不关注,这将导致项目取决于混乱。最后,可能只依靠冲突。在实际发展中,大多数发展将遇到对冲突的依赖情况,并且更难找到。这与Maven的依赖管理密切相关。
我的项目非常简单,只引入了SLF4J-API,我对他的影响是通过提供的描述,提供的描述,当其他项目介绍我的Jar套件时,SLF4J-API不会传递给其他项目,因为因为他是私人的,这是为了防止保留团聚。
但是请考虑一下,这里有问题。Povided不传递给JAR软件包的其他项目的原因,因为它没有包装在他在包装时修改的依赖性中。必须需要这一点。该提供的装饰的依赖性(例如服务API),因为Tomcat本身具有这种依赖性,因此可以将其宣布为Provents。
提供的属于Maven修改范围之一。让我们看一下Maven的介绍
编译(编译范围)编译为默认范围;如果没有范围,则依赖关系的范围是汇编的范围。编译范围取决于所有classPath,也可以包装。
提供(现有)提供的依赖项只能在JDK或容器提供后才使用。例如,如果您开发了Web应用程序,则可以编译您需要在ClassPath中使用的Servlet API来编译Servlet,但是您可以使用不想将此Servlet API包括在包装的Warr中;此Servlet API JAR由您的YouApplication Server或Service Container。已提供的依赖项可在ComplingSpath中使用(不是运行时)。它们没有传输,也不会打包。
运行和测试系统时需要运行时(范围)运行时,但是不需要编译。
在一般汇编和运行时不需要测试(测试范围)测试范围,只能在测试汇编和测试操作阶段可用。
系统(系统)系统范围依赖项与提供的相似,但是您必须明确提供本地系统中的JAR文件的路径。这是允许本地对象的编译,这些对象是系统库的一部分。始终可用,Maven不会在仓库中寻找它。如果您将依赖范围设置为系统范围,则必须同时提供系统路径元素。注意不建议使用此范围(您应该始终尝试尝试引用公共或定制的Maven存储库)。
回到我的包装罐项目,最后我取决于我的依赖
这可能会导致依赖性,但Maven提供了防止滥用依赖的另一种方法
此形式可以排除参考依赖性中引用的其他依赖关系,这也阻止了对冲突的依赖的可能性。对于我这次的依赖性,它是log依赖性。形式,但是对于一些更依赖的项目,我认为最好使用此表单
3)配置文件阅读问题
该功能需要先读取配置文件,然后使用静态代码块来分配静态属性。在本地测试期间阅读文件没有问题。将项目打包到Jar软件包中后,发现您可以读取配置文件。但是我无法阅读内容
经过调查后,发现包装后,代码读取的配置文件被读取到带有相同名称的JAR软件包项目的简介文件的配置文件。在JAR中阅读配置文件
查看读取配置文件的源代码,classloader中的getResource方法,类似于执行双极分配的LoadClass。此资源的加载处理也估计是处理覆盖范围的问题
设置Maven项目版本号,并将包装项发布到远程字段库,以便完成JAR软件包项目。
有时,简单的事情也包含许多小问题,这些小型技术是非常基本的技术能力,例如Maven的范围,Maven的依赖管理,这些技术非常小,并且在我们日常发展中的日常发展中,阅读资源文件也很简单,但是如何阅读它非常复杂。注意每种小技术也是一个巨大的进步,对吗?
原始:https://juejin.cn/post/7106392257653276702