java - 如何在 Eclipse 动态 Web 应用程序中使用 java jar 库
问题描述
我正在尝试为需要共享一组通用 Jars(在某些情况下是刚刚导入工作项目中的代码)的项目设置目录结构(和项目文件)。
例如,假设我有一个名为“common”的通用项目。该项目包含可能由独立的 Java 应用程序或在本例中为动态 Web 应用程序使用的通用代码和 jar。
我的 web 项目(我们称之为 webapp1)从“common”导入源,所以这不是问题。我这样做的原因是,在这一点上,我真的没有任何东西可以创建一个“通用”项目并将其编译成一个 jar,然后从 webapp1 引用它,因为 webapp1 不会拿起供应商的 jars它们必须都在 WEB-INF/lib 下。
那么我该怎么做呢?我曾考虑让 WEB-INF 成为另一个目录的符号链接,其中包含我的 jar,但这不适用于 Windows 环境。但这基本上就是我想要的东西。这是对此的描述:
common \
src \
some.source.packages
lib \
HibernateLibs \
hibernate.jar
hibernate2.jar
ApacheCommonLibs \
common-string.jar \
etc.
webapp1
src \
local.source.packages
reference to common.source.packages above
WebContent \
WEB-INF \
lib \
This is where I'd like to place references to the libs in common
(only those I need for this web app)
如果我只有 webapp1 参考通用,这种工作,但是当我尝试从 IDE 运行我的 webapp1 时,这些库实际上并不在正确的位置。
请注意,像 Maven 等构建系统或多或少已经退出,因为我的公司只允许特定的库和这些库的版本(这很痛苦,但这是我必须使用的)。
感谢您对此的见解。我并没有拘泥于项目结构,但我确实想避免多个项目都使用相同的 JAR,并且必须使它们保持同步(更不用说它会使检查代码变得非常慢)。
解决方案
创建 Web 项目时,无需将库添加到 WEB_INF 文件夹中。
解决方案:
- 您写道您不想使用 maven “因为我的公司只允许特定的库和这些库的版本”
您可以将库安装到本地 maven 存储库、本地计算机。因此,将从您的本地计算机中检索依赖项。这很简单:
mvn install:install-file -Dfile=[file_path] -DgroupId=[your group id] -DartifactId=[artifact id] -Dversion=[version] -Dpackaging=jar
您也可以使用Nexus或Jfrog 神器服务器来检索 jar。此服务器仅适用于您的公司。因此,只有您的公司才能访问这些罐子。
- 您也可以从您的 JAR/EAR/WAR 中提取依赖项(但这取决于您使用的技术 - Spring、EJB 还是只是 Servlets);例如,让我们为 Spring 框架编写示例:
默认情况下,spring boot 插件将项目的所有依赖打包在可执行 JAR 中,结构如下:
- 罐
- 引导信息
- 类(包含 java 包和类)
- lib(包含依赖 jars)
- META-INF(包含 MANIFEST.MF)
- org(spring 运行时支持包)
- 引导信息
MANIFEST.MF负责查找 JAR 文件。在 Spring 中,我们有以下午餐器:JarLauncher、WarLauncher和PropertiesLauncher。它们的目的是加载资源。JarLauncher只能定位和加载 BOOT-INF 中的类和 lib 目录中的 JAR。但是您可以使用PropertiesLauncher在项目之外指定 jar 文件。所以让我们去做吧!首先,您应该使用 ZIP 布局。
马文:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
</configuration>
</plugin>
摇篮:
springBoot{
layout = "ZIP"
}
然后一切都很简单。现在运行Web 应用程序:
java -Dloader.path=lib,external-jar.jar -jar starter.jar
现在我们有了没有WEB_INF 文件夹的 Web 应用程序,并且我们拥有应用程序之外的所有依赖 jar 文件。最后 ,我们有许多项目使用项目外部的相同库 jar。
推荐阅读
- android - 我如何在 android studio 离线模式下使用 Firebase crashlytics
- javascript - Javascript:使用过滤器复制数组
- sql - 从 Varchar 中删除起始字符
- python - 如何根据纹理分割此图像?
- javascript - JS 外部函数在 HTML 页面中不可见
- javascript - 在 app.get() 中调用时,导出的函数返回“未定义”
- regex - 如果不是 255/255,则为文本编写正则表达式模式
- r - 在Matlab中以与R的bs()函数相同的方式计算B样条基
- installation - Hyperledger Fabric 中的 GOPATH
- javascript - 表格行的剪贴板副本