我目前正从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
答案 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”应该是第一个应该首先构建的项目。