Maven构建时WebDriver Unix可执行文件为何变为TextEdit文件?
问题分析与解决办法
这个问题我之前帮同事排查过类似的,大概率是Maven在打包过程中把WebDriver这类二进制可执行文件当成普通文本资源处理了,导致文件的二进制结构或者权限被破坏,Mac系统没法识别成可执行文件,就默认用TextEdit打开了。下面是几个常见的原因和对应的解决办法:
1. Maven Resources插件的默认文本过滤/转换规则
Maven的maven-resources-plugin默认会对src/main/resources目录下的文件做文本处理:比如转换换行符(Unix LF转Windows CRLF)、替换变量等。如果WebDriver的二进制文件放在这个目录下,就会被当成普通文本修改,破坏了二进制结构,系统自然识别成TextEdit文件。
解决办法:在pom.xml中配置Resources插件,排除WebDriver文件,不对它们进行过滤处理。示例配置如下:
<build> <resources> <!-- 处理普通文本资源,开启过滤 --> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>**/chromedriver</exclude> <exclude>**/geckodriver</exclude> <exclude>**/*.exe</exclude> <!-- 根据你的WebDriver文件名调整排除规则 --> </excludes> </resource> <!-- 专门处理二进制可执行文件,关闭过滤 --> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>**/chromedriver</include> <include>**/geckodriver</include> <include>**/*.exe</include> </includes> </resource> </resources> </build>
2. 可执行权限丢失
即使文件的二进制结构没被破坏,Maven打包后可能会丢失文件的可执行权限(也就是chmod +x赋予的权限)。Mac系统检测不到可执行权限,就会默认用TextEdit打开文件。
解决办法:用maven-antrun-plugin在打包阶段重新设置文件权限。示例配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <!-- 替换成target目录中你的WebDriver文件路径 --> <chmod file="${project.build.directory}/classes/chromedriver" perm="755"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build>
3. 文件存放位置错误
如果WebDriver文件放在了src/main/java这类会被编译处理的目录,Maven可能会对其进行不必要的处理,导致文件损坏。
解决办法:把WebDriver二进制文件放到专门的目录(比如src/main/bin),然后在pom.xml中配置这个目录为资源目录,并关闭过滤:
<build> <resources> <resource> <directory>src/main/bin</directory> <filtering>false</filtering> </resource> </resources> </build>
内容的提问来源于stack exchange,提问作者user218649
相关产品推荐
相关产品推荐

