gpt4 book ai didi

java - 如何在 Eclipse 动态 Web 应用程序中使用 java jar 库

转载 作者:行者123 更新时间:2023-11-28 22:39:27 25 4
gpt4 key购买 nike

我正在尝试为需要共享一组通用 Jar 的项目(以及在某些情况下刚刚导入到工作项目中的代码)设置目录结构(和项目文件)。

例如,假设我有一个名为“common”的通用项目。该项目包含可由独立 Java 应用程序或在本例中为动态 Web 应用程序使用的通用代码和 jar。

我的网络项目(我们称之为 webapp1)从“common”导入源代码,所以这不是问题。我这样做的原因是,在这一点上,创建一个“通用”项目并将其编译成一个 jar 然后从 webapp1 引用它真的对我没有任何意义,因为 webapp1 不会选择供应商 jar,因为它们必须都在 WEB-INF/lib 下。

那我该怎么做呢?我考虑过让 WEB-INF 成为另一个目录的符号链接(symbolic link),其中包含我的 jars,但这不适用于 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 引用公共(public),这种方法可行,但当我尝试从 IDE 运行我的 webapp1 时,这些库实际上并不在正确的位置。

请注意,像 Maven 等构建系统或多或少会被淘汰,因为我的公司只允许特定的库和这些库的版本(这很痛苦,但这是我必须使用的)。

感谢您对此的见解。我并没有拘泥于项目结构,但我确实希望避免多个项目都包含相同的 JAR,并且必须使它们保持同步(更不用说它会使检查代码变得非常慢)。

最佳答案

当您创建 Web 项目时,无需将您的库添加到 WEB_INF 文件夹中。

解决方案:

  1. 你写道你不想使用 maven “因为我的公司只允许特定的库和这些库的版本”

您可以将您的库安装到您的本地 Maven 存储库,到您的本地机器。因此将从您的本地计算机检索依赖项。非常简单:

 mvn install:install-file -Dfile=[file_path] -DgroupId=[your group id] -DartifactId=[artifact id] -Dversion=[version]   -Dpackaging=jar

此外您可以使用NexusJfrog artifactory 服务器来检索jar。此服务器将供贵公司使用。因此,这些 jar 将仅供您的公司访问。

  1. 您也可以从您的 JAR/EAR/WAR 中提取依赖项(但这取决于您使用的技术 - Spring、EJB 或只是 Servlet);例如,让我们为 Spring 框架编写示例:

spring boot插件默认将项目的所有依赖打包到可执行JAR中,结构如下:

  • jar
    • 启动信息
      • 类(包含java包和类)
      • lib(包含依赖包)
    • META-INF(包含 MANIFEST.MF)
    • org(spring 运行时支持包)

MANIFEST.MF 负责查找 JAR 文件。在 Spring 中,我们有以下 luncher:JarLauncherWarLauncher 和 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>

Gradle :

springBoot{
layout = "ZIP"
}

那么一切就简单了。现在运行网络应用程序:

java -Dloader.path=lib,external-jar.jar -jar starter.jar

现在我们有了 没有 WEB_INF 文件夹的 Web 应用程序,并且我们在应用程序之外拥有所有依赖 jar 文件。 最后我们有许多项目使用项目外部的相同库 jar。

关于java - 如何在 Eclipse 动态 Web 应用程序中使用 java jar 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51353283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com