在我设置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();
答案 0 :(得分:2)
你必须先实现一件事,然后再实现另外两件事。 这是第一件事:
public static LoadPomTask loadPomFromClassLoaderResource(final String pathToPomResource)
现在我们意识到没有办法避免类路径,我们必须回答另外两个问题:
META-INF/maven/${groupId}/${artifactId}/pom.xml
)建议的解决方案:
由于META-iNF/MAVEN/${groupId}/${artifactId}
可能会发生变化,因此您不应该在您的代码中引用从那里加载内容。所以我建议你看一下maven-resources-plugin。哪个允许您在编辑期间在您选择的位置复制pom.xml文件(我实际上建议您将其复制到两个位置:
/src/main/resources
和
/src/test/resources
相应地process-resources
和process-test-resources
阶段:see maven-build-lifecycles
总结一下:
如果要使用类型(pom.xml)的位置而不是完整路径,则需要从类路径加载pom.xml
您需要在编译阶段使用maven-resources-plugin在您的类路径中包含pom.xml文件