允许依赖项中的类从我的项目的类路径中加载测试资源

时间:2014-12-11 03:49:41

标签: java maven classpath

注意:StackOverflow上有许多类似的问题。区别在于这些问题涉及在他们自己的项目中使用另一个项目的资源。我想知道如何从我自己的项目所依赖的另一个项目中存在的类中引用我的自己的项目资源。例如:

我有一个Maven项目(A),其结构如下:

src
  test
    java
      com
        mycompany
          myproject
            SimpleTest.java
    resources
      com
        mycompany
          myproject
            pictures
              mountain.jpg
pom.xml

在项目A的pom.xml文件中,我有一个这样的资源条目:

<testResources>
  <testResource>
    <directory>src/test/com/mycompany/myproject/pictures</directory>
  </testResource>
</testResources>

项目A还依赖于另一个Maven项目(B)。在运行时,项目A中的SimpleTest.java类将使用以下命令直接从文件系统(而不是JAR或WAR文件)启动:

C:\path\to\project\A\mvn clean test

这将从我公司的Nexus存储库下载项目B作为JAR文件,构建项目A,并使用TestNG通过Surefire插件在SimpleTest.java中运行测试。

让我们假设那里有一个名为&#39; Helper&#39;的项目B的课程。其中包含一个&#39;上传&#39;功能如下:

public class Helper {
  public static void upload(String filename) {
    Class clazz = this.getClass();
    ClassLoader classLoader = clazz.getClassLoader();
    InputStream inputStream = classLoader.getResourceAsStream(filename);
    // TODO: upload file
  }
}

现在让我们假设SimpleTest.java中的一个测试使用&#34; mountain.jpg&#34;来调用Helper.upload。作为一个论点。

目前inputStream最终为null。但是,如果filename参数与项目B中的某个资源文件匹配,则上传功能 DOES 可以工作。

在我看来,项目B(IE:Helper.class)中的类在类路径上没有项目A的资源,即使项目A当前正在运行。这对我来说似乎是违反直觉的。我想在项目A中运行测试时,可以从任何类中获得项目A中的所有测试资源。我怎样才能实现这一点?

1 个答案:

答案 0 :(得分:0)

只需将Helper放入项目A并从B调用它。让它返回InputStream,而不是用资源做某事,这样B就可以用它执行测试操作。

请注意,Class.getResourceAsStream()可能更容易使用。