Maven WAR打包时如何排除tess4j依赖中的Windows库文件?
完全可以通过Maven实现打包时剔除tess4j中的win32-x86/winlibraries文件,推荐用maven-war-plugin或者maven-dependency-plugin来处理,两种常用方案如下:
方案一:用maven-war-plugin直接在WAR打包时排除
在项目的pom.xml的<build>节点下添加maven-war-plugin配置,通过packagingExcludes指定要从依赖jar中剔除的文件路径:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> <!-- 使用最新稳定版本即可 --> <configuration> <!-- 排除tess4j jar包中的win32-x86目录下所有文件 --> <packagingExcludes> WEB-INF/lib/tess4j-*.jar!/win32-x86/** </packagingExcludes> </configuration> </plugin> </plugins> </build>
这里的!/是Maven定位jar包内部路径的分隔符,tess4j-*.jar匹配所有版本的tess4j依赖包,win32-x86/**表示该目录下的所有文件和子目录都会被排除。
方案二:预处理tess4j依赖(适合需要复用精简版jar的场景)
如果需要多次使用剔除了Windows库的tess4j,可以先解压依赖、删除冗余文件,再重新打包:
- 用maven-dependency-plugin解压tess4j到指定目录:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.6.0</version> <executions> <execution> <id>unpack-tess4j</id> <phase>process-resources</phase> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>你的tess4j版本号</version> <outputDirectory>${project.build.directory}/tess4j-unpacked</outputDirectory> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin>
- 用maven-clean-plugin删除win32-x86目录:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>3.3.2</version> <executions> <execution> <id>remove-win-libs</id> <phase>process-resources</phase> <goals> <goal>clean</goal> </goals> <configuration> <filesets> <fileset> <directory>${project.build.directory}/tess4j-unpacked/win32-x86</directory> <includes> <include>**/*</include> </includes> </fileset> </filesets> <excludeDefaultDirectories>true</excludeDefaultDirectories> </configuration> </execution> </executions> </plugin>
- 重新打包并安装到本地仓库:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>repackage-tess4j</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <classesDirectory>${project.build.directory}/tess4j-unpacked</classesDirectory> <finalName>tess4j-no-win</finalName> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <id>install-modified-tess4j</id> <phase>install</phase> <goals> <goal>install-file</goal> </goals> <configuration> <file>${project.build.directory}/tess4j-no-win.jar</file> <groupId>net.sourceforge.tess4j</groupId> <artifactId>tess4j</artifactId> <version>你的tess4j版本号-no-win</version> <packaging>jar</packaging> </configuration> </execution> </executions> </plugin>
之后直接在依赖中引用这个修改后的版本即可。
注意事项
- 先解压原始tess4j jar包核对内部路径,不同版本的目录结构可能略有差异,确保配置的路径准确。
- 方案一操作更简便,适合单次打包场景;方案二适合需要重复使用精简版tess4j的场景。
内容的提问来源于stack exchange,提问作者Rubén Aguado
相关产品推荐
相关产品推荐

