【问题标题】:Building a WAR with unzipped JAR dependencies?使用解压缩的 JAR 依赖项构建 WAR?
【发布时间】:2012-05-10 07:49:20
【问题描述】:

我想将我所有的 .class 从依赖 jar 包含到 WAR classes/ 目录中,而不是在 lib/ 目录中包含 Jar。

我有:

my-webapp/
  ...
  WEB-INF/
    lib/
      mylib-1.0-SNAPSHOT.jar

我想要:

my-webapp/
  ...
  WEB-INF/
    classes/
      mylib-1.0-SNAPSHOT (all **.class**)

我也看到了 maven-dependency-plugin,但它要求我的 jar 安装到本地或远程存储库中。但是mylib-1.0-SNAPSHOT.jar 是在我的 WAR 之前编译的,如果我打电话给mvn package,那就失败了!

那么,如何将我的 jar 依赖解压到 war 类中呢? (例如 maven-shade-plugin 用于 Jar)

【问题讨论】:

  • 在您的 Web 应用程序中使用类而不是 jar 有什么意义?
  • 因为 Jar 包含我的服务的公共类,而这个 webapp 包含特定的类。我有多个使用相同类的 webapps,所以我将它们打包成一个 Jar 依赖项。因为没有代码重复!你认为这是正确的方式吗?
  • 如果公共 jar 在 WEB-INF/lib 目录中,您仍然可以使用公共 jar 中的类; WEB-INF/lib 中的所有内容最终都会出现在 Web 应用的类路径中。

标签: maven jar dependencies war unpack


【解决方案1】:

我想在commnet上写这个,但是文字太长了。

对不起,我不明白你的意思。您有多个共享类的 web 应用程序,因此您已将这些公共类打包到 JAR 中,现在您可以分发 jar 并避免代码重复。那没问题。此时,对于一个 Webapp,在 /WEB-INF/classes 或 /WEB-INF/lib/ 中有一个类作为 jar 的一部分没有区别,webapp 在这两种情况下都可以使用这些类。

使用 Maven,您应该有 n 个项目。一个用于您的公共 jar,然后,一个用于您拥有的每个 webapp(您的公共 jar 是一个依赖项)。在为您的 Web 应用程序构建 WAR 之前,如果公共类已更改,您应该首先安装(在您的公共存储库中)jar:mvn install。安装 jar 后,您可以构建您的 WAR:mvn war:war

【讨论】:

  • 好的,但是这个问题是当我有一些类依赖于同一个包中的另一个类时。将这些类分成 Jar 用于公共类和 classes 文件夹 用于我的具体数据对我来说并不自然。此外,我的项目实际上是用 Ant 构建的,为 Maven 更改它会更改我的可交付(jar,war,ear)结构......但是如果没有 options 来设置它,好的。
  • 如果现在,你被要求使用 Maven 而不是 Ant,我建议我上面写的:common jar for common classes and classes folder for specific code(这是我们的特定源代码到其特定的 webapp 应用程序)。当你尝试做一些不符合约定的事情时,Maven 并不是那么好,所以尽量避免它。
猜你喜欢
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 2016-12-25
  • 2013-09-05
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多