来自pom.xml,Shrinkwrap的Maven解析器

时间:2015-08-24 14:30:32

标签: java maven integration-testing shrinkwrap

在我设置pom.xml的完整路径的测试中,一切正常:

{code}
File[] files = Maven.resolver().loadPomFromFile("/full/system/path/pom.xml").importDependencies(ScopeType.TEST, ScopeType.PROVIDED).resolve().withTransitivity().asFile();
{code}

在很多例子中,只使用了pom.xml,所以我尝试了:

{code}
File[] files = Maven.resolver().loadPomFromFile("pom.xml").importDependencies(ScopeType.TEST, ScopeType.PROVIDED).resolve().withTransitivity().asFile();
{code}

但在这种情况下我得到例外:

Path to the pom.xml file must be defined and accessible

如果我尝试传递“”../pom.xml“,结果相同。我必须将pom.xml中的所有依赖项包含到war存档中,这是在arquillian测试期间部署的,是否有解决方法? 理想情况下,我想重用用于构建项目的pom.xml。我不想在“src / test / resources”文件夹中有单独的pom.xml文件。

编辑:我有@baba的主要想法,但是我没有应对pom.xml,而是通过maven资源过滤设置了basedir属性:

我已将tests.properties文件添加到test/resources,在文件中添加了一个属性:

basedir=${basedir}

在pom.xml中我使用了[http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html]

<build>
    <testResources>
        <testResource>
            <directory>src/test/resources</directory>
            <filtering>true</filtering>
        </testResource>
    </testResources>

在测试中,我已经加载了所有依赖项:

ResourceBundle resourceBundle = ResourceBundle.getBundle ("tests");
String baseDir = resourceBundle.getString("basedir");
File[] files = Maven.resolver().loadPomFromFile(baseDir + File.separator + "pom.xml").importDependencies(ScopeType.TEST, ScopeType.PROVIDED).resolve().withTransitivity().asFile();

1 个答案:

答案 0 :(得分:2)

你必须先实现一件事,然后再实现另外两件事。 这是第一件事:

  1. 一旦你谈论jar中的相对路径而不是完整路径,你就会(大多数时候)讨论类路径文件。所以你可能应该看看LoadPomTask有一个方法
  2.   

    public static LoadPomTask loadPomFromClassLoaderResource(final String   pathToPomResource)

    现在我们意识到没有办法避免类路径,我们必须回答另外两个问题:

    1. 默认情况下是否将pom.xml文件捆绑在类路径中(回答:是)(其中?默认情况下为&gt; META-INF/maven/${groupId}/${artifactId}/pom.xml
    2. 如果我正在使用测试框架,例如surefire,它是否会更改类路径,并且是在执行测试时在同一位置可用的pom.xml(回答:是的,主要是)
    3. 建议的解决方案: 由于META-iNF/MAVEN/${groupId}/${artifactId}可能会发生变化,因此您不应该在您的代码中引用从那里加载内容。所以我建议你看一下maven-resources-plugin。哪个允许您在编辑期间在您选择的位置复制pom.xml文件(我实际上建议您将其复制到两个位置:

      /src/main/resources
      

      /src/test/resources
      

      相应地process-resourcesprocess-test-resources阶段:see maven-build-lifecycles

      总结一下:

      1. 如果要使用类型(pom.xml)的位置而不是完整路径,则需要从类路径加载pom.xml

      2. 您需要在编译阶段使用maven-resources-plugin在您的类路径中包含pom.xml文件