Java Arquillian:相对于项目而不是服务器的路径

Java Arquillian:相对于项目而不是服务器的路径,java,path,jboss-arquillian,shrinkwrap,Java,Path,Jboss Arquillian,Shrinkwrap,在使用Arquillian/Shrinkwrap测试我的测试用例时,如何使用项目相对路径 IDataSet dataSet = new FlatXmlDataSetBuilder().build(new File("src\\ZZZZZ.xml")); insertFromXML(dataSet); 将在测试时给我此异常 java.io.FileNotFoundException:C:\Uprogs\jboss-eap-6.2.4\bin\src\ZZZZZ.xml 它试图在我部署测试的服务器

在使用Arquillian/Shrinkwrap测试我的测试用例时,如何使用项目相对路径

IDataSet dataSet = new FlatXmlDataSetBuilder().build(new File("src\\ZZZZZ.xml"));
insertFromXML(dataSet);
将在测试时给我此异常
java.io.FileNotFoundException:C:\Uprogs\jboss-eap-6.2.4\bin\src\ZZZZZ.xml

它试图在我部署测试的服务器的文件夹中找到该文件。 相反,我希望他查看与我的项目相关的文件夹(例如
C:\Users\xy\workspace\MyProject\src\ZZZZZ.xml
)。在网上搜索,但什么也没找到

包覆面提取的部署方式如下:

@Deployment
public static Archive<?> createDeployment() {
    File[] libs = Maven.resolver()  
            .loadPomFromFile("pom.xml").resolve(
                    "jcifs:jcifs"
                    , "org.dbunit:dbunit"
                    , "com.ibm:db2jcc_license_cisuz"
                    , "com.ibm:db2jcc"
                    )  
            .withTransitivity()
            .asFile();  

    return ShrinkWrap.create(WebArchive.class, "test.war")
            .addAsLibraries(libs)
            .addPackage("de.abc.RuleEditor")
            .addAsResource("de/abc/RuleEditor/messages.properties", "messages.properties")
            .addAsManifestResource("test-jboss-deployment-structure.xml","jboss-deployment-structure.xml")
            .addAsWebInfResource("test-beans.xml", "beans.xml")     
            .addAsWebInfResource(
                    new StringAsset("<faces-config version=\"2.0\"/>"), "faces-config.xml")
                    .merge(ShrinkWrap.create(GenericArchive.class).as(ExplodedImporter.class)  
                            .importDirectory("src/main/webapp").as(GenericArchive.class), "/", Filters.include(".*\\.xhtml$"));
}
@部署
公共静态存档createDeployment(){
文件[]libs=Maven.resolver()
.loadPomFromFile(“pom.xml”).resolve(
“jcifs:jcifs”
,“org.dbunit:dbunit”
,“com.ibm:db2jcc_license_cisuz”
,“com.ibm:db2jcc”
)  
.with及物性()
.asFile();
返回ShrinkWrap.create(WebArchive.class,“test.war”)
.addAsLibraries(libs)
.addPackage(“de.abc.RuleEditor”)
.addAsResource(“de/abc/RuleEditor/messages.properties”、“messages.properties”)
.addAsManifestResource(“test jboss deployment structure.xml”、“jboss deployment structure.xml”)
.addasWebInfoResource(“testbeans.xml”、“beans.xml”)
.AddasWebInfoResource(
新的StringAsset(“”,“faces config.xml”)
.merge(ShrinkWrap.create(genericalarchive.class).as(ExplodedImporter.class)
.importDirectory(“src/main/webapp”).as(genericalarchive.class),“/”,过滤器。包括(“.\\\.xhtml$”);
}
使用Arquillian/Shrinkwrap(…)时,如何使用项目相对路径

这是一种荒谬的方法,不要那样做:]

Arquillian背后的想法是创建微部署(它意味着:使用
包覆面收缩
工具创建
jar/war/ear
存档),并包含该存档中的所有内容

因此,请修改您的部署:

@Deployment
public static Archive<?> createDeployment() {

return ShrinkWrap.create(WebArchive.class, "test.war")
        (...)
        .addAsLibraries(libs)
        // Add in below way any additional file to the archive
        .addAsResource("path-to-testset.xml", "dbunit/testset.xml")
        .addPackage("de.abc.RuleEditor")
        .addAsResource("de/abc/RuleEditor/messages.properties", "messages.properties")
        .addAsManifestResource("test-jboss-deployment-structure.xml","jboss-deployment-structure.xml")
        (...)
}
它要好得多,因为需要测试的所有内容都已经包含在归档文件中。没有相对路径名,也没有绝对路径名

我个人的建议是:小心使用
DbUnit
,因为您可能会注意到,随着项目的发展,构建和管理许多xml数据集可能会成为越来越大的问题。这就是为什么我更喜欢

@Test
public void test_something() {
   FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder();
   builder.setColumnSensing(true);

   FlatXmlDataSet xmlDataSet = builder.build(
            this.getClass().getResourceAsStream("/dbunit/testset.xml"));
  // ...