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

时间:2012-07-26 20:07:12

标签: java resources classpath

我有一个新手Java问题。

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

无论如何,在检查这些测试后,我们的SVN管理员希望将.java文件保存在树的一部分中,并将资源(如XML文件和所需的JAR)保存在树的另一部分中。

因此,我的测试最初使用相对路径引用了XML文件,该路径现在不起作用。

我的问题是:

  1. 我可以使用CLASSPATH使用我的XML文件制作目录(我希望如此)。
  2. 假设有效,我如何在我的代码中引用这样包含的文件?
  3. 如果我不应该使用CLASSPATH,我会接受其他解决方案。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

  • SRC
      • 的java
      • 资源
    • 测试
      • 的java
      • 资源
  • 目标
    • 测试的类

编译器将src / main / java编译为target / classes,将src / main / resources的资源复制到target / classes文件夹,类似于测试。如果测试有一个包含类和测试类的类路径,那么一切正常。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

以下是配置示例:

source Directory is ${basedir}/src/main/java

resource directory is ${basedir}/src/main/resources

在构建脚本中,将 .java文件和资源文件( .xml)复制到类路径中的目录,例如:

${basedir}/target/classes

您的测试代码针对目标目录运行。目标目录未签入SVN,让您的SVN管理员满意,并且您不必更改代码。