当前位置: 首页 > 面试题库 >

如何处理Junit中Maven和Intellij之间的相对路径

符修杰
2023-03-14
问题内容

我有一个带有模块的Maven项目

/myProject
pom.xml
    /myModule
    pom.xml
       /foo
       bar.txt

考虑一下 myModule 中的Junit,它需要打开 bar.txt ,其中maven的basedir是模块目录。

因此,打开文件 bar.txt

  new File("foo/bar.txt")

当您在 intellij中* 启动相同的junit 时执行mvn test BUT
时,此方法效果很好,但会失败,因为Intellij在项目目录而不是模块目录中设置了basedir。
*

Intellij尝试打开myProject/foo/bar.txt而不是myProject/myModule/foo/bar.txt

有办法解决吗?


问题答案:

如果要保留代码,可以尝试在运行/调试配置中更改工作目录(组合框中的第一个条目,可以访问要运行的内容),将其设置为模块根目录。但更喜欢其他建议的方法:

ClassLoader.getSystemResourceAsStream(youPath)

还是我的首选:

getClass.getResource(youPath)

要么

getClass.getResourceAsStream(youPath)

路径中的前导“ /”表示项目的工作目录,而没有“ /”表示当前类的相对目录。

我将最后一种解决方案用于测试:将测试数据资源放在与测试源相同的程序包级别,或放在子目录中,以避免程序包太乱。

这样,我可以进行简单的调用而无需复杂的路径,而不必处理工作目录:

project-root  
  - module A  
    - src  
      - test
        - rootfile.txt  
        - my-complicated-package-naming-root
          - mypackage
            - Test.java
            - testResource.xml

我可以这样获取文件:

final URL rootfile= Test.class.getResource("/rootfile.txt");
final URL testResource= Test.class.getResource("testResource.xml");


 类似资料:
  • 问题内容: 有一点澄清, 据我所知,这些是相对路径和绝对路径, 相对路径和绝对路径有什么区别? 使用这些路径是否会发生性能问题? 我们会为这些站点提供安全吗? 有什么办法可以将绝对路径转换为相对路径 问题答案: 相对路径和绝对路径有什么区别? 必须针对另一个URI计算一个。另一个没有。 使用这些路径是否会发生性能问题? 没什么大不了的。 我们将为这些站点提供任何安全保护吗? 没有 有什么办法可以将

  • 我只是在尝试IntelliJ IDE,我想在java项目中添加一个外部jar。 我已经在

  • 本文向大家介绍非对称和对称多处理之间的区别,包括了非对称和对称多处理之间的区别的使用技巧和注意事项,需要的朋友参考一下 非对称多处理 非对称多处理是使用由一个主处理器处理的两个或多个处理器。所有CPU都是互连的,但不是自调度的。AMP用于根据任务的优先级和重要性将特定任务调度到CPU。 对称多处理 对称多处理是使用两个或多个共享公共内存空间的自调度处理器。每个处理器都可以访问I / O和存储设备。

  • 本文向大家介绍PHP处理数组和XML之间的互相转换,包括了PHP处理数组和XML之间的互相转换的使用技巧和注意事项,需要的朋友参考一下 在开发中,我们经常会遇到数组与XML之间的互相转换,尤其在处理接口开发的时候经常用到,比如对方客户端POST一个XML格式的数据到服务器上,服务器上的程序要负责接收解析,还有需要将数据表数据以XML格式提供给第三方等等应用。 本文我们将简单介绍如何使用PHP处理数

  • 我试图使用相对路径在GUI中显示图标,如“display image from”。我试过无数种不同的方式来表达这一点,但都不奏效。这使我认为这是我的智能想法设置或项目结构的问题。我已将“资源”文件夹设置为“资源文件夹”。我不知道它还指望我做什么。

  • 问题内容: 我为这个问题感到困惑。 在各种核心对象上定义,JSON gem也是如此。但是,实现方式并不相同- ActiveSupport版本需要参数,而JSON gem版本则不需要。 我安装了需要JSON gem的gem,但我的应用程序坏了。问题是我在返回对象列表的控制器中使用,但是我想控制要返回的属性。 在系统中任何地方进行编码时,都会出现此错误消息: 我尝试了一些在线阅读的方法来修复它,但是没