java - Maven 构建 - 类文件大小减小
问题描述
我正在尝试对现有项目进行 mavenize。我能够构建 EAR 文件(因为我必须在 Websphere 中部署),当我尝试部署时,使用管理控制台 - 能够成功安装,但应用程序无法正常工作,经过调查,我发现class files
大小比较小到参考 EAR 文件(旧的现有 EAR 文件)
我构建 EAR 文件所遵循的步骤
- 已安装 M2E 插件
- 配置到 Maven
- 从下面的文件夹中添加所有jar 文件
lib
(我在 SO 中阅读,这不是推荐的方式,但要完成项目,我必须这样做)
<dependency>
<groupId>JarFile</groupId>
<artifactId>JarFile</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/WebContent/WEB-INF/lib/CRDBXMLExternal.jar</systemPath>
</dependency>
- 添加了相关插件
(war, EAR)
- 干净的构建和安装。
ear
创建的文件。ear
包含一个war
文件,其中包含所有与项目相关的文件,包括class
等jsp
。
我将文件夹结构与现有的 EAR 文件及其内容进行了比较,看起来都不错。但只有类文件的大小(不是全部,但超过 80%)是不同的。我使用 JD 来decompile
查看代码,大部分代码都不存在,包括imports
.
如果有人遇到过类似的问题,请告诉我这里做错了什么。
更多信息
有两个项目文件夹(都是 maven)一个将创建 WAR,另一个将在 EAR pom.xml 中创建 EAR 存在依赖项
<dependency>
<groupId>com.comp.abc</groupId>
<artifactId>abc</artifactId>
<version>1.0</version>
<type>war</type>
</dependency>
然后有一个插件
<build>
<plugins>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.10</version>
<configuration>
<version>5</version>
<defaultLibBundleDir>lib</defaultLibBundleDir>
<generatedDescriptorLocation>C:\COMP\Dev\may\repos\0.0.1-SNAPSHOT</generatedDescriptorLocation>
</configuration>
</plugin>
</plugins>
</build>
添加 WAR 文件构建(移除了大部分依赖只保留了一个示例)POM.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.comp.abc</groupId>
<artifactId>abc</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<name>ABC</name>
<description>ABC</description>
<dependencies>
<!-- Local Repository -->
<dependency>
<groupId>com.ibm.ws.runtime</groupId>
<artifactId>com.ibm.ws.runtime</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/WebContent/WEB-INF/lib/com.ibm.ws.runtime.jar</systemPath>
</dependency>
</dependencies>
<repositories>
<repository>
<id>nexus-releases</id>
<name>nexus</name>
<url>http://abc-nexus.ldn.xyz.com:9080/nexus/content/groups/public/</url>
</repository>
</repositories>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- <warSourceDirectory>${project.basedir}\WebContent</warSourceDirectory> -->
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
解决方案
上面没有告诉 Maven 用lib
目录依赖打包 EAR 文件。它实际上告诉它在仅在编译时提供的现有 JAR 上创建本地依赖项。因此,当您导出 EAR 时,它不包括任何 JAR,因为它假定它们是在运行时提供的。
您应该改用打包 EAR 文件的 maven-ear-plugin。您可以在此处找到完整的文档。
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>3.0.1</version>
</plugin>
推荐阅读
- c# - 如何将实体 ID 从 c sharp API 返回到 angular 9?
- java - 直接使用 github 存储库位置的复合构建
- ansible - ansible 模块 postgresql_schema 不支持从数据库中对单个模式进行备份和恢复
- javascript - jQuery: Javascript 中的 not()
- .net - 您如何解决单选按钮组的绑定问题
- kotlin - Kotlin - 以实用的方式从平面列表构建列表映射
- python - 如果预先输入,我如何为一个范围输入 2 次
- json - 在烧瓶中返回多个 json 对象
- symfony - 简单的 Doctrine 查询生成器
- java - h2 中的查询 group by 有效,但在 Oracle DB 中无效