PigUnit - 如何在Maven项目结构下访问pig脚本?

时间:2018-04-13 20:13:33

标签: maven apache-pig

我正在尝试将PigUnit与Maven一起使用。在Maven中,我的猪脚本位于模块的根目录下<module>/src/main/pig/<scriptName>.pig

所有PigUnit测试教程要么编写pig脚本的绝对url(当构建运行时除了我的机器之外显然不起作用)或相对路径,它只是“神奇地”工作。但是当我直接输入脚本名称或者将src/main/pig/<scriptName>.pig输入PigTest时,运行mvn test时找不到脚本。

用线测试(使用scala + scalatest):

val pigTest = new PigTest("src/main/pig/calcProductVectors.pig", args)

结果:

- Script does something *** FAILED ***
  java.io.FileNotFoundException: src/main/pig/calcProductVectors.pig (No such file or directory)
  at java.io.FileInputStream.open0(Native Method)
  at java.io.FileInputStream.open(FileInputStream.java:195)
  at java.io.FileInputStream.<init>(FileInputStream.java:138)
  at org.apache.pig.pigunit.PigTest.readFile(PigTest.java:296)
  at org.apache.pig.pigunit.PigTest.readFile(PigTest.java:292)

当运行mvn测试时,如何让src/main/pig进入路径?

1 个答案:

答案 0 :(得分:0)

好的,所以我在Java项目中发现了一些测试,只是将pig目录添加到maven中的project.build.testResources:

<testResources>
  <testResource>
    <!-- Pig is being included in test/resource so that we can access it with PigUnit -->
    <directory>src/main/pig</directory>
    <filtering>true</filtering>
  </testResource>
  <testResource>
    <directory>src/test/resources</directory>
    <filtering>true</filtering>
  </testResource>
</testResources>

然后JUnit测试会将src/main/pig/<scriptName>.pig传递给PigTest。

这在我的项目中没有起作用,不确定它是否因为使用了scalatest或其他内容。我可以看到目录的内容被复制到<module>/target/test-classes,但他们仍然没有找到他们的直接名称(这似乎更有意义,因为他们被复制没有src / main /猪部分)或者为Java项目工作的整个路径。

最终从this answer,我发现测试在文件系统上的运行位置,它只是模块名称,所以我调整了路径,因此它起作用了:

val pigTest = new PigTest("<module>/src/main/pig/calcProductVectors.pig", args)