Java maven测试在东方语言角色中失败,而IDEA成功

Java maven测试在东方语言角色中失败,而IDEA成功,java,maven,Java,Maven,这是测试类: @AutoConfigureTestDatabase @Sql(value = {"classpath:/ut_user_init.sql"}) public class UserControllerTest extends MockMvcTest { @Test @WithUserDetails(value = MockData.ADMIN_USERNAME, userDetailsServiceBeanName = "mockUserDetailsService

这是测试类:

@AutoConfigureTestDatabase
@Sql(value = {"classpath:/ut_user_init.sql"})
public class UserControllerTest extends MockMvcTest {
    @Test
    @WithUserDetails(value = MockData.ADMIN_USERNAME, userDetailsServiceBeanName = "mockUserDetailsService")
    public void testGetUser() throws Exception {}
}
以及
UserController
类:

@RequestMapping("list")
public String list(Model model) {
   userService.findByName("[An Eastern character]")
}
UserService
类中:

User findByName(String name) {
     return userRepository.findByName(name); // name is in Eastern language.
}
这是
ut\u user\u init.sql中的相关数据

INSERT INTO `user` VALUES ('32', '[The Eastern character]');
这是有效的
pom.xml

<maven.compiler.encoding>utf-8</maven.compiler.encoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
utf-8
UTF-8
UTF-8

现在奇怪的是:如果我使用IDEA服务类返回一个查找结果,但是如果我使用
mvn test-Dtest=path.to.TestClass
,它将失败,因为返回为null。但是如果我打印
userRepository.findAll().size()
的结果,我可以看到它打印了sql文件中列出的正确数量的记录。我还尝试了打印
userRepository.findOne(32L)
的结果,这两种语言都是MinGW(windows使用GDB表示东方语言,而源文件是UTF-8)和Linux为
名称打印随机代码。虽然IDEA没有这个问题,但它返回结果并按原样打印出东方字符。为什么mvn和IDEA表现不同,是什么导致mvn失败,以及如何解决这个问题?谢谢。

我猜当您从命令行运行时,它采用的是您的系统默认编码,可能不是UTF-8

试试这个:

mvn test -DargLine="-Dfile.encoding=UTF-8" -Dtest=MyTestClassName

这很有效。但是为什么mvn不读取pom.xml,因为这三个属性现在都在utf-8中。为什么pom.xml utf-8配置不起作用?它们是否用于不同的目的,为什么pom.xml utf-8配置不起作用?是的,这些pom属性与
file.encoding
不同。正如可以帮助您的额外信息一样-有一种方法可以让
mvn测试
执行您需要的操作,请参考此示例(部分
):