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

时间:2018-07-16 00:31:12

标签: java eclipse tomcat dynamic

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

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

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

那我该怎么做呢?我曾经考虑过将WEB-INF变成一个到我目录中的另一个目录的符号链接,但这不适用于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之类的构建系统已经或多或少地出现了,因为我的公司仅允许特定的lib和这些lib的版本(这很痛苦,但这是我必须使用的)。

感谢您对此的见解。我并不拘泥于项目结构,但我想避免在整个项目中使用同一个JAR的多个项目,而必须保持它们同步(更不用说它使签出代码的速度非常慢)。

2 个答案:

答案 0 :(得分:2)

创建Web项目时,无需在WEB_INF文件夹中添加库。

解决方案:

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

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

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

,您可以在 Nexus Jfrog人工制品服务器上检索罐子。对于您的公司,此服务器将。因此,这些罐子将只能只能用于您的公司

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

默认情况下,spring boot插件将项目的所有依赖项打包为具有以下结构的可执行JAR:

  • JAR
    • BOOT-INF
      • 类(包含Java包和类)
      • lib(包含依赖项jar)
    • META-INF(包含MANIFEST.MF)
    • org(Spring运行时支持包)

MANIFEST.MF 负责查找JAR文件。在春季,我们有以下午餐盒: 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应用程序没有 WEB_INF文件夹,并且我们在应用程序外部拥有所有依赖项jar文件。 最后:我们有许多项目使用与项目外部相同的库jar。

答案 1 :(得分:0)

您不应依赖Eclipse构建部署包(.war文件)。使用构建工具,例如Ant,Maven,Gradle,...

如果公司具有一组标准的授权库,则公司应创建一个包含这些库的内部Maven存储库(例如,使用Artifactory,并且您应使用Maven来获取 that 存储库中特定项目所需的库,并构建部署包。
优势:库都位于同一位置,而不是版本控制系统中。

如果您不能让公司创建存储库,而是拥有一个包含所有库的“公共”项目,请使用Ant来构建您的项目并创建部署包。
优点:项目构建可以作为批处理构建进行复制。

Gradle是Maven和Ant的有效替代品。