问题标签 [skinny-war]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
229 浏览

java - 自动装配失败,当根据涉及的类具有默认访问器的瘦战争概念加载 jar 时

我们的应用程序基于瘦战争概念(http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html)。

我们在应用程序级别加载了 spring jar 和其他核心应用程序 jar。普通 jar 和核心应用 jar 都有自己的 applicationContext.xml。战争也有他们自己的 web-jars,其中有 applicationContext.xml 特定于每场战争。我们注意到,自动装配(在核心应用程序 jar 类中)在应用程序启动时失败,我们在随附的日志文件中看到错误。

以下是观察结果:

  1. 如果在应用程序级别加载的所有 jar 都移动到单独的战争(WEB-INF/lib),自动装配工作正常。
  2. 如果核心应用程序 jar 中的类具有公共访问器,则自动装配工作正常,这是出于安全和封装目的的默认设置。

我们必须遵循 Skinny War 的概念,并且不能修改核心应用程序 jar。

0 投票
1 回答
2227 浏览

maven - Maven与warpath的瘦身战争

我有一个项目,其中 3 个战争模块被打包在一个耳模块中。我的问题是每个库 jar 都包含在每个 war-modules 以及 ear-module 中,这使得生成的 ear-file 非常大(目前大约 190MB)。

我在这里遵循了关于使用 maven 进行瘦身战争的教程:http ://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html

有了这个,我设法将耳朵的大小缩小到 45MB 左右,这很好,但是当我尝试部署到 glassfish 时,它抱怨缺少一些类。

我发现这是由于对 appfuse-struts 的依赖,它被打包为一个 war 文件。这包括在其中一个战争项目中使用战争路径依赖。

由于制作瘦战争的教程指出,在战争中找到的所有依赖项也必须在耳朵中定义。我试过这个,但是 appfuse-struts 依赖是一个战争路径,这使它不起作用。(当只向 ear pom 添加战争依赖项时,它抱怨它没有找到某些类,并且当添加战争路径依赖项时,maven 抱怨它不知道战争路径是什么。)

当战争使用战争路径依赖项时,有谁知道用瘦战争创造耳朵的方法?

0 投票
2 回答
2843 浏览

maven - maven skinnyWars 不会从 WEB-INF\lib\ 中删除 ejb jar

skinnyWarshttp://maven.apache.org/plugins/maven-ear-plugin/examples/skinny-wars.html偶然发现了 maven 主题。如前所述,我可以使用此方法将选定的依赖项从 WAR 模块移动到 EAR 模块。它们将可用于 EAR 中的所有其他 WAR 模块。

正如我发现移动的依赖项必须在 EAR 模块中声明并且必须包含在META-INF\lib目录中。这不适用于位于 EAR 模块根目录中的 EJB 模块。

我的问题是如何从 WAR 中删除重复的 EJB 模块并将引用指向 EAR 文件中的那些?

现在的结构是这样的:

0 投票
1 回答
1289 浏览

jsf-2 - 如何在 EAR 中正确使用 OmniFaces

我想在我的 Jave EE 7 应用程序中使用OmniFaces 1.7。我的应用程序是一个包含 JAR 和一个瘦 WAR的 EAR 。我的一些 JAR 依赖于 OmniFaces,因此 OmniFaces 工件必须在 EAR 中,但不在WEB-INF/libWAR 中。

这是我的 EAR 的样子:

当我这样说时,OmniFaces 转换器(如GenericEnumConverter)没有在 JSF 中注册并且无法工作。此处此处讨论了其原因。基本上根据JSF 2.0 Spec(第11.5.1 节对扫描类注解的要求),只扫描 WARsWEB-INF/lib目录。

所以我的问题是:我应该如何在我的应用程序中包含 OmniFaces

包括它两次(在EAR/lib和 WARs 中WEB-INF/lib)可能会起作用,但感觉很笨拙。我前段时间用 RichFaces 4.3.5 (同样的问题)试过了,它没有用,但导致IllegalArgumentException: duplicate key: class javax.faces.convert.ByteConverter.

0 投票
2 回答
328 浏览

maven - 瘦身战和 log4j

我们使用 log4j 进行应用程序日志记录,使用 maven 进行应用程序打包。由于我们将 3-4 个应用程序部署为 EAR 的一部分,因此 EAR 的大小很大。我们试图采用“Skinny War”的方法,但遇到了 log4j 的问题。我们曾经为每个应用程序将应用程序日志记录在不​​同的文件中,但是使用 Skinny WAR,因为 log4j 的类只被加载一次,只创建一个日志文件,并且每个应用程序的日志都被附加到同一个日志文件中。

我们想到了在每个 WAR 中打包 log4j.jar 的著名解决方案,但是我们必须在 WAR ex 中移动每个需要 log4j 的 jar 文件。spring jar 的这本质上会增加 EAR 的大小。

这个问题有其他解决方案吗?任何建议都会有很大帮助。

谢谢。

0 投票
0 回答
1808 浏览

jboss - 将多个 Spring Boot Wars 的 Skinny Wars 放入一个 ear 包并部署到 jboss 7.3 (jboss-eap-6.2)

我正在尝试将 ear 包部署到带有 skinnywars 的 jboss 7.3 (jboss-eap-6.2) 中,但到目前为止还没有运气。耳朵包含多个弹簧靴战和罐子。

为了清楚起见,我创建了一个简单的耳朵项目,其中包含 2 个小弹簧靴大战,我得到了相同的结果,将 skinnywars 设置为 false,然后它就可以工作了....

过程:

  • 我已经全新安装了 jboss-eap-6.2(将以独立模式运行)
  • 我已经为主项目创建了一个父 pom.xml,其中包含 spring-boot-starter-parent 和模块的 dependenciesManagements(
  • 我创建了两个简单的 web1.war 和一个 web2.war spring boot 项目,每个项目都只有一个 index thymeleaf 页面。(部署到服务器的每场战争都运行良好)
  • 我创建了一个带有通用依赖项(用于瘦部分)的 ear pom.xml 和用于 skinnywars 的 maven-ear-plugin 配置。
  • 包装和安装工作正常(耳朵项目重约12Mb,
  • 将 .ear 文件复制到独立/部署,并且服务器没有启动任何一个 Spring Boot 应用程序......

我错过了什么??

父 pom.xml

web1.war 项目 pom.xml:

web2.war 项目(与 web1 相同):

最后是带有 maven-ear-plugin 的 skinnywars 配置的 ear pom:

正如我之前提到的,如果我将 true 更改为 false,则 ear 包在应用程序服务器中运行良好......

我已经尝试了很多不同的 maven-war-plugin 和 maven-ear-plugin 配置,但没有成功...

更新:这是 jboss 日志的输出,似乎要加载 web1 和 web2 的上下文,但是两个 spring-boot 应用程序都没有启动....

更新:我将示例代码推送到 github -> guilu/spring-boot-ear-skinny-war,以查看是否有人将项目部署并在独立的 jboss-eap-6.2 服务器中运行。

0 投票
0 回答
824 浏览

spring-boot - 多次春季靴子战争与瘦身战争

有人可以向我指出如何将 2 个 spring-boot 战争应用程序打包到一个带有瘦战争的耳朵中的分步指南吗?

我在 jboss-eap-6.2 服务器上部署了两个 spring-boot 应用程序并单独工作,但是当我尝试将它们打包到耳朵中时,结果没有部署。

maven ear插件配置?pom.xml 配置?

0 投票
1 回答
94 浏览

spring - Ear中的Spring RestTemplate依赖问题

我工作的组织有一些独立的服务,它们使用 Spring Boot 和 RestTemplate 相互通信以及主要的单体(经典的瘦身战争)。

但是,当我们尝试让 RestTemplate 在 Ear 中运行而不是在 War 中运行时,我们遇到了类路径问题。我们不考虑将 rest 调用作为 Web 应用程序的一部分,因此我们将该代码移到了一个库中,该库被打包在 EAR/lib 中。这也将 spring-web (4.1.6.RELEASE) 移动到 EAR/lib,此时 WebApplicationInitializer 代码停止工作。

有没有办法让应用程序仍然在 EAR/lib 中使用 spring-web 而不是 WEB-INF/lib 启动?还是我们应该放弃自己在战争中只使用 RestTemplate/寻找 RestTemplate 的替代品?

0 投票
0 回答
48 浏览

jsf - OmniFaces ExtensionlessURL 功能不适用于瘦 WAR 文件

我在我的一个项目中使用 OmniFaces ExtensionlessURL FacesViews 功能,并发现当 Web 应用程序被打包为 EAR 存档中的瘦 WAR 存档并部署到 Wildfly 容器或 WebSphere Liberty 时,此功能似乎不起作用配置文件容器。如果我尝试访问没有 .xhtml 后缀的页面,在这两个容器上都会出现 404 错误。

如果我将包含瘦 WAR 存档的相同 EAR 存档部署到 GlassFish 容器或 WebLogic 容器,则 ExtensionlessURL 功能将按预期工作,并且无需 .xhtml 后缀即可访问页面。

如果我部署一个包含普通 WAR 存档的 EAR 存档(即 OmniFaces jar 存储在 WAR 存档的 WEB-INF/lib 文件夹中),那么 ExtensionlessURL 除了在 WildFly 容器和 WebSphere Liberty Profile 容器上按预期工作GlassFish 和 WebLogic 容器。

我使用的 WildFly 版本是 9.0.2,WebSphere Liberty Profile 的版本是 8.5.5.7。我使用的 OmniFaces 版本是 2.2

我可以在我的配置中更改一些内容以允许 OmniFaces Extensionless URL 功能与 Wildfly 和 WebSphere Liberty 配置文件容器上的瘦 WAR 档案一起使用,还是这是一个错误?

为了解决这个问题,我创建了一个独立的示例,其中包含重现问题所需的最低限度。

web.xml 文件如下:

Maven WAR插件的配置如下:

Maven EAR 插件的配置如下:

Maven EAR 项目还包含以下依赖项,用于从 WAR 项目中提取依赖项:

0 投票
1 回答
992 浏览

java - maven-war-plugin 如何从 lib 目录中排除提供的 jar,但包含在带有前缀文件夹的清单中

我正在尝试建立一场瘦身战争,以便以后包含在一个大耳朵文件中。ear 构建完全独立于我的战争项目,并希望我提供一个瘦战争,使用正确的清单文件,ear 承诺在其根 /libs 文件夹中提供提供的 jar。

我面临的问题是获取战争的 manifest.mf 文件以指定提供的 jar 位于 ear 的 /libs 文件夹中,而编译/运行时 jar 位于战争中。即 manifest.mf 类路径条目希望如下所示:

commons-lang 的范围是提供并预计在 ear 的 libs 目录中。

commons-codec 是编译时间,预计将成为战争的一部分。

我已经探索了maven-war-plugin,但无法弄清楚如何让它为提供的 依赖项提供classpathPrefix

请问有什么建议吗?


最终采用的解决方案(感谢所有提示和链接)要求 ear 提供的依赖项的范围为提供,这注意到了 hack:fake-application.xml:

然后我将这个新的瘦战争部署到存储库,并使用 maven 部署插件这样做: