【问题标题】:How to add JAR file to an existing WAR file web-inf/lib folder?如何将 JAR 文件添加到现有的 WAR 文件 web-inf/lib 文件夹中?
【发布时间】:2020-10-05 14:08:12
【问题描述】:

我的设置如下:

  • 我有一个不受我控制的 war 文件(我只能将其作为依赖项拉取),它是一个 Spring Boot Web 应用程序
  • 我有一个 jar 文件,我想将它添加到 web-inf/lib 文件夹中,以便 war 文件在其类路径中看到它

到目前为止,我正在将 war 文件部署到本地 Tomcat,并将 jar 添加到 Tomcat 安装的 lib 文件夹中。我想切换到一个可执行的war文件,这样我就可以通过命令行运行它,而不是使用单独的Tomcat实例。

如何使用 Maven 实现我的目标?

【问题讨论】:

    标签: java maven


    【解决方案1】:

    你可以试试 maven-war-plugin 的 overlays 功能,但我不确定,web-inf/lib 是否被 Spring Boot 独立可执行文件使用

    【讨论】:

    • 我没有任何网络应用程序,我想通过添加额外的 jars 以某种方式覆盖现有的战争。我不确定在这种情况下覆盖是否有帮助。
    • 所以你可以创建另一个带有war包装的maven模块,它需要现有的war和你的jar,并使用overlays功能将两者结合起来
    • 好的,生成的war文件看起来不错,但是当我运行它(java -jar)时,我得到以下信息: 原因:java.lang.IllegalStateException:无法打开嵌套条目'WEB-INF /lib/XYZ.jar'。它已经被压缩并且嵌套的jar文件必须在没有压缩的情况下存储。请检查用于创建可执行 jar 文件的机制显然 XYZ.jar 在这里只是一个示例
    • recompressZippedFiles 选项似乎不能解决问题 - jars 仍然被压缩
    【解决方案2】:

    罗伯特的建议是正确的,我想总结一下我到底要做什么:

    1. 将 maven-war-plugin 与指向战争依赖项的叠加层一起使用
    2. 正确设置插件:

      <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.0</version> <configuration> <recompressZippedFiles>false</recompressZippedFiles> <archive> <manifestFile>src/main/resources/MANIFEST.MF</manifestFile> <compress>false</compress> </archive> <failOnMissingWebXml>false</failOnMissingWebXml> ... </build>

    我必须明确复制清单文件(它被忽略)并禁用 jar 压缩。

    【讨论】:

      猜你喜欢
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 2014-04-23
      • 2014-11-30
      相关资源
      最近更新 更多