首页 > 其他分享 >Maven 编译后War包运行失败

Maven 编译后War包运行失败

时间:2023-09-13 09:24:45浏览次数:59  
标签:maven lib plugin project jar war Maven 编译 War

问题发生原因

项目构建使用Maven,因为代码较老有一些jar包是本地项目打包生成,一部分jar是古老第三方包,不准备上传私有仓库。

在war包构建时使用maven插件maven-war-plugin

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>${project.basedir}/../out/artifacts/AAA/</directory>
                            <targetPath>WEB-INF/lib</targetPath>
                            <filtering>true</filtering>
                            <includes>
                                <include>**/BBB.jar</include>
                            </includes>
                        </resource>
                        <resource>
                            <directory>${project.basedir}/../AAA/lib/</directory>
                            <targetPath>WEB-INF/lib</targetPath>
                            <filtering>true</filtering>
                            <includes>
                                <include>**/CCC.jar</include>
                                <include>**/DDD.jar</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

生成后war在tomcat下运行,提示zip无法解压,文件损坏。

实际解压war包内BBB.jar的时候,确实文件与IDEA构建jar结构不同。

原因

官方解释(https://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html)

To prevent corrupting your binary files when filtering is enabled, you can configure a list of file extensions that will not be filtered.

翻译:为了避免开启 filter后你的二进制文件被损毁,你可配置不被过滤的文件拓展名列表

在war插件增加如下配置

<nonFilteredFileExtensions>
      <!-- default value contains jpg,jpeg,gif,bmp,png -->
      <nonFilteredFileExtension>jar</nonFilteredFileExtension>
</nonFilteredFileExtensions>

究其原因可能下官方文档一下内容得到解释

Note: In versions 2.2 and earlier of this plugin the platform encoding was used when filtering resources. Depending on what that encoding was you could end up with scrambled characters after filtering. Starting with version 2.3 this plugin respects the property project.build.sourceEncoding when filtering resources. One notable exception to this is that .xml files are filtered using the encoding specified inside the xml-file itself.

2.2和之前的版本过滤资源时使用平台的默认编码。从这里可以猜测过滤资源时会使用到字符编码。

因项目使用GBK编码,是否在二进制包转移时候进行UTF8进行编码?

最终pom.xml改为

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <nonFilteredFileExtensions>
                          <nonFilteredFileExtension>jar</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                    <webResources>
                        <resource>
                            <directory>${project.basedir}/../out/artifacts/AAA/</directory>
                            <targetPath>WEB-INF/lib</targetPath>
                            <filtering>true</filtering>
                            <includes>
                                <include>**/BBB.jar</include>
                            </includes>
                        </resource>
                        <resource>
                            <directory>${project.basedir}/../AAA/lib/</directory>
                            <targetPath>WEB-INF/lib</targetPath>
                            <filtering>true</filtering>
                            <includes>
                                <include>**/CCC.jar</include>
                                <include>**/DDD.jar</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

巨人的肩膀

maven-war-plugin二进制文件损坏问题_war打包 二进制文件损坏

标签:maven,lib,plugin,project,jar,war,Maven,编译,War
From: https://www.cnblogs.com/hr0552/p/17698564.html

相关文章

  • VMware中的CentOS7虚拟机固定ip地址
    1.虚拟机网络连接模式采用NAT模式2.开机后修改ifcfg-ens33文件cd/etc/sysconfig/network-scripts#有的机器不叫ens33,数字可能不同vimifcfg-ens33需要修改BOOTPROTO的值为static,并且添加IPADDR,GATEWAY,DNS1。(因为子网掩码默认是255.255.255.0所以可以不用添加NETMASK=25......
  • Vue编译出现This file is being treated as an ES module because it has a '.js' fil
    问题描述在编译前端项目时出现下面的问题:FailedtoloadPostCSSconfig:FailedtoloadPostCSSconfig(searchPath:D:/WebProject/imooc-front):[FailedtoloadPostCSSconfig]FailedtoloadPostCSSconfig(searchPath:D:/WebProject/imooc-front):Thisfileisbe......
  • 1、Vmware、OS简述
    Vmware、OS简述1、虚拟机定义虚拟机(VirtualMachine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离的环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内......
  • AS报错在编译过程中发现了重复的类
    问题描述Task:composite:checkDebugDuplicateClassesFAILEDExecutionfailedfortask':composite:checkDebugDuplicateClasses'.Afailureoccurredwhileexecutingcom.android.build.gradle.internal.tasks.CheckDuplicatesRunnableDuplicateclasskotlin.c......
  • 编译ijkplayer指北
    下载VMwaer安装ubantu,笔者用的是18.04.6下载ndk 版本R14b下载Androidsdk下载ijkplayer的源码git上直接拉配置Androidndk环境变量配置Androidsdk环境变量检测ndksdk是否生效编辑module.sh下的解码协议执行opssh的编译执行ffmpeg的编译执行jikplayer......
  • bilibili B站:makefile 编译Linux C/C++项目快速入门
    视频摘自:https://www.bilibili.com/video/BV1vg41177zT    ......
  • VMware Workstation 虚拟机配置桥接
    VMwareWorkstation虚拟机配置桥接1.配置网络首选项2.更改虚拟机网络模式3.查看物理机网络信息3.1查看物理机网卡,子网掩码,网关信息3.2查看物理机网卡,DNS信息4.配置虚拟机网卡信息根据物理机查询的信息,进行以下配置:5.验证测试......
  • 安装CentOS7 解决错误信息:Warning: /deu/root does not exist Generating
    本文适用于错误信息"Warning:/deu/rootdoesnotexistGenerating"的一种情况不适用于错误信息"Warning:/dev/rootdoesnotexist,couldnotboot" 在给一台老旧的 DellR710安装CentOS7时发现的一个错误"Warning:/deu/rootdoesnotexistGenerating" 看了好......
  • RK3568开发笔记(八):开发板烧写buildroot固件(支持hdmi屏),搭建Qt交叉编译开发环境,编译一个D
    前言  前面发现开发板用ubuntu固件发现空间不够,本篇使用buildroot固件,来实现目标板运行qt界面应用。<br>烧写buildroot固件  这部分更详细的参照《RK3568开发笔记(六):开发板烧写ubuntu固件(支持mipi屏)》的步骤,本质上烧写都是一样的,只是不同的update.img。步骤一:下载镜像  ......
  • RK3568开发笔记(八):开发板烧写buildroot固件(支持hdmi屏),搭建Qt交叉编译开发环境,编译一个D
    前言  前面发现开发板用ubuntu固件发现空间不够,本篇使用buildroot固件,来实现目标板运行qt界面应用。 烧写buildroot固件  这部分更详细的参照《RK3568开发笔记(六):开发板烧写ubuntu固件(支持mipi屏)》的步骤,本质上烧写都是一样的,只是不同的update.img。步骤一:下载......