Java资源-在目录树中使用远离的文件

Java资源-在目录树中使用远离的文件,java,resources,classpath,Java,Resources,Classpath,我有一个新手Java问题。 我必须为我们在SQLServer中使用的一些存储过程做一套J/DBUnit测试。这些测试使用了几个子目录中的一些XML文件,这些子目录最初与我的Java项目放在同一个目录中 无论如何,在签入这些测试后,我们的SVN经理希望将.java文件保存在树的一部分,将资源(如XML文件和必需的JAR)保存在树的另一部分 因此,我的测试最初引用的XML文件具有相对路径,但现在不起作用 我的问题是: 我可以通过类路径使包含XML文件的目录可用吗(我希望如此) 假设这样做有效,我如何

我有一个新手Java问题。

我必须为我们在SQLServer中使用的一些存储过程做一套J/DBUnit测试。这些测试使用了几个子目录中的一些XML文件,这些子目录最初与我的Java项目放在同一个目录中

无论如何,在签入这些测试后,我们的SVN经理希望将.java文件保存在树的一部分,将资源(如XML文件和必需的JAR)保存在树的另一部分

因此,我的测试最初引用的XML文件具有相对路径,但现在不起作用

我的问题是:

  • 我可以通过类路径使包含XML文件的目录可用吗(我希望如此)
  • 假设这样做有效,我如何在代码中引用以这种方式包含的文件
  • 如果我不应该为此使用类路径,我愿意接受其他解决方案

  • 忘了calsspath吧。为测试提供一个参数/配置,该参数/配置为XML文件的相对路径定义根目录。

    忘记CalsPath。为测试提供一个参数/配置,该参数/配置为XML文件的相对路径定义根目录。

    不,在这个实例中不应该使用CLASSPATH,因为Java使用它。但是,您可以使用类似的方法,从环境变量或配置文件加载一个值,该值指示存储XML文件的目录。

    否,在这个实例中不应该使用CLASSPATH,因为Java使用它。但是,您可以使用类似的方法,从环境变量或配置文件加载一个值,该值指示XML文件存储的目录。

    使用类路径没有问题,标准maven项目布局如下所示:

    • src
      • 主要
        • 爪哇
        • 资源
      • 试验
        • 爪哇
        • 资源
    • 目标
      • 班级
      • 测试班
    编译器将src/main/java编译为target/classes,src/main/resources的资源被复制到target/classes文件夹,与测试类似。如果测试有一个包含类和测试类的类路径,那么所有测试都可以正常工作


    项目布局如何,构建如何?

    使用类路径没有问题,标准maven项目布局如下所示:

    • src
      • 主要
        • 爪哇
        • 资源
      • 试验
        • 爪哇
        • 资源
    • 目标
      • 班级
      • 测试班
    编译器将src/main/java编译为target/classes,src/main/resources的资源被复制到target/classes文件夹,与测试类似。如果测试有一个包含类和测试类的类路径,那么所有测试都可以正常工作


    您的项目布局如何,构建如何?

    您可以在不更改类路径的情况下完成此操作。其思想是将资源文件存储在单独的目录中,但在运行构建过程时将它们复制到类路径中的目录中

    以下是一个配置示例:

    source Directory is ${basedir}/src/main/java
    
    resource directory is ${basedir}/src/main/resources
    
    在构建脚本中,将.java文件和资源文件(.xml)复制到类路径中的目录,例如:

    ${basedir}/target/classes
    

    测试代码针对目标目录运行。目标目录没有签入到SVN,这使您的SVN管理员感到高兴,并且您不必更改代码。

    您可以在不更改类路径的情况下执行此操作。其思想是将资源文件存储在单独的目录中,但在运行构建过程时将它们复制到类路径中的目录中

    以下是一个配置示例:

    source Directory is ${basedir}/src/main/java
    
    resource directory is ${basedir}/src/main/resources
    
    在构建脚本中,将.java文件和资源文件(.xml)复制到类路径中的目录,例如:

    ${basedir}/target/classes
    

    测试代码针对目标目录运行。目标目录没有签入到SVN,这使您的SVN管理员感到高兴,而且您不必对代码进行更改。

    好的,它只是一个小项目,基本上位于一个文件夹中,但我要移动到的布局是Maven,因此这很好地回答了这个问题。我只需要阅读Maven,我想我会更好地理解它是如何工作的。好吧,这只是一个小项目,基本上是在一个文件夹中,但我要移动到的布局是Maven,所以这很好地回答了这个问题。我只需要阅读Maven,就可以更好地理解它是如何工作的,我想这是可行的,但如果你有时用ant/Maven开始测试,有时用Eclipse或Idea这样的IDE开始测试,那就很难处理了。没有人喜欢在运行不同的测试之前准备一个测试设置。这是可行的,但是如果您有时使用ant/maven启动测试,有时使用Eclipse或Idea之类的IDE启动测试,那么处理起来就很困难。没有人喜欢在运行不同的测试之前准备测试设置。