Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @TestPropertySource windows和linux文件分隔符_Java_Spring_Junit_System Variable - Fatal编程技术网

Java @TestPropertySource windows和linux文件分隔符

Java @TestPropertySource windows和linux文件分隔符,java,spring,junit,system-variable,Java,Spring,Junit,System Variable,我有一个JUnit测试类,从这个声明开始 @RunWith(SpringRunner.class) @SpringBootTest @TestPropertySource(properties = { "cache.working.dir=./src/test/resources/cacheDirRepository/" } ) 如何在基于linux的文件分隔符系统('/')和Windows基本文件分隔符系统('\')上启动此测试类 提前感谢,java.i

我有一个JUnit测试类,从这个声明开始

@RunWith(SpringRunner.class)
@SpringBootTest
@TestPropertySource(properties = { 
        "cache.working.dir=./src/test/resources/cacheDirRepository/" } )
如何在基于linux的文件分隔符系统('/')和Windows基本文件分隔符系统('\')上启动此测试类


提前感谢,

java.io.File包中有一些变量,您可以使用它们来解决此问题:

File.separator // use '/' in linux and '\' in windows
File.separatorChar // use '/' in linux and '\' in windows
File.pathSeparator // use ':' in linux and ';' in windows
File.pathSeparatorChar // use ':' in linux and ';' in windows

java.io.File
包中有一些变量,您可以使用它们来解决此问题:

File.separator // use '/' in linux and '\' in windows
File.separatorChar // use '/' in linux and '\' in windows
File.pathSeparator // use ':' in linux and ';' in windows
File.pathSeparatorChar // use ':' in linux and ';' in windows
提出以下几点:

//独立于平台,可跨Linux和Windows安全使用

"cache.working.dir=."+File.separator+"src"+File.separator+"test"+File.separator+"resources"+File.separator+"cacheDirRepository"
提出以下几点:

//独立于平台,可跨Linux和Windows安全使用

"cache.working.dir=."+File.separator+"src"+File.separator+"test"+File.separator+"resources"+File.separator+"cacheDirRepository"

嗯。我分享我最后的解决方案。也许还有一个更聪明的。我很高兴知道

3行动:

  • 我将使用占位符在运行时处理注释。 注释的声明是用文件分隔符占位符参数化的
  • 我在容器中声明一个特定的bean来处理这些占位符
  • 最后,我在运行时将依赖操作系统的文件分隔符char作为JVM参数传递
  • 适用于Unix/MacOsX

    mvn clean install -DargLine="-Dfile_separator=/"
    
    窗户

    mvn clean install -DargLine="-Dfile_separator=\\"
    

    嗯。我分享我最后的解决方案。也许还有一个更聪明的。我很高兴知道

    3行动:

  • 我将使用占位符在运行时处理注释。 注释的声明是用文件分隔符占位符参数化的
  • 我在容器中声明一个特定的bean来处理这些占位符
  • 最后,我在运行时将依赖操作系统的文件分隔符char作为JVM参数传递
  • 适用于Unix/MacOsX

    mvn clean install -DargLine="-Dfile_separator=/"
    
    窗户

    mvn clean install -DargLine="-Dfile_separator=\\"
    

    /
    有什么问题吗?实际上,在任何地方都可以正常工作。它在本机windows平台上不工作。一种可能的解决方法是启动linux命令解释器。但我正在寻找一个纯Windows解决方案。我想执行一个
    init.bat
    ,而不是
    init.sh
    /
    有什么问题吗?实际上,在任何地方都可以正常工作。它在本机windows平台上不工作。一种可能的解决方法是启动linux命令解释器。但我正在寻找一个纯Windows解决方案。我想执行
    init.bat
    ,而不是
    init.sh
    。是的。这个解决方案正在运行,但是如果您有多个类似的测试用例,那么转换所有测试用例是一项真正的工作。是的,但是您可以通过创建一个方法java.util.List pathParts=java.util.Arrays.asList(“test”、“resources”、“cacheDirRepository”);genPath=StringUtils.join(pathParts,File.separator);不能在注释声明中使用StringUtils静态函数。您将得到错误:
    注释属性TestPropertySource.properties的值必须是常量表达式
    我不能同时使用File.separator…:-(是的。此解决方案正在工作,但如果您有多个类似的测试用例,那么转换所有测试用例是一项真正的工作。是的,但您可以通过创建方法java.util.List pathParts=java.util.Arrays.asList(“测试”、“资源”、“缓存目录”);genPath=StringUtils.join(pathParts,File.separator)来创建通用路径);不能在批注声明中使用StringUtils静态函数。将出现错误:
    批注属性TestPropertySource.properties的值必须是常量表达式
    我不能同时使用File.separator…:-(