Maven:在项目之间共享资源

时间:2019-05-21 14:35:43

标签: java maven resources

我目前正从ant转换为maven,以使用由几个项目组成的更大的库。我是Maven的新手。

由于多个库需要相同的外部文件作为测试输入,因此我决定创建一个包含资源的单独项目(Project1),如here所述。 Project1仅包含测试资源,除包含空方法main的类project1.java外,仅包含测试资源。资源文件是ASCII文本和带有任意文件扩展名的二进制文件。现在,我想在其他项目的测试中使用这些文件,例如专案2。我试图说明我的结构:

Root  
|-Project1: Resources
| |-src
| | |-main
|   |-test
|     |-resources
|       |-file1.txt
|       |-file2.dat
|       |-...
|-Project2: Consumer
| |-src
| | |-main
|   |-test
|     |...
|       |-test1.java (requires file1.txt)
|       |-test2.java (requires file2.dat)
|       |-...

我在Project1的POM中添加了Project2作为依赖项。这两个项目都是使用Netbeans 11的Clean and Build构建的,所以我想mvn clean,build&install。

我确实用Project1测试了Project1.class.getClassLoader().getResource([FILE])中相关文件的存在,并且所有文件似乎都位于正确的位置。但是,如果我从Project1.class.getClassLoader().getResource([FILE])中使用Project2,例如test1.java未找到相应的FILE

System.out.println("1:" + Project1.class.getClassLoader().getResource(""));
System.out.println("2:" + Project1.class.getClassLoader().getResource("file1.txt"));
test1.java的{​​{1}}中

给出:

Project2

因此,我尝试遵循this description中的方法。我的解释问题是,我没有1: file:[PATHTOPROJECT]/Project2/target/test-classes/ 2: null 来执行plugin的{​​{1}},如消费者部分所述。因此,我不知道将它们放在哪里。在此示例中,执行是在executions中使用maven-shared-archive-resources进行的。

我也看过this thread,但得到了<groupId>org.codehaus.mojo</groupId>

有人这么善良,向一个精通新手的人解释一下,我如何在不同项目之间共享资源?还有另一种更简单的方法吗?


<artifactId>sql-maven-plugin</artifactId>项目2

我试图将Ant BuildException剥离为MWE。

POM.xml

2 个答案:

答案 0 :(得分:1)

更改项目1中资源的位置。注意,已从test目录移至main

|-Project1: Resources
| |-src
| | |-main
|     |-resources
|       |-file1.txt
|       |-file2.dat
|       |-...

然后,在项目2的POM中,将项目1添加为测试依赖项:

    <dependency>
        <groupId>org.test</groupId>
        <artifactId>project1</artifactId>
        <version>${project1.version}</version>
        <scope>test</scope>
    </dependency>

答案 1 :(得分:0)

创建另一个项目“ onlyresources”或类似的内容,而不是共享资源,并且在项目内部仅保留那些* .txt,*。dat文件。其他项目将依赖于上面定义的名为“ onlyresources”的项目。对于多模块Maven项目,请确保将依赖项添加到其他项目。这个项目我的意思是“ onlyresources”应该是第一个应该首先构建的项目。