I am currently switching from ant to maven for a larger library consisting of a couple of projects. I am pretty new to Maven.
Due to the fact, that multiple libraries require the same external files as input for testing, I decided to create an individual project containing the resources (Project1), as explained here. Project1 only contains the test resources, nothing else, except an class project1.java with an empty main method. The resource files are ASCII text and binary files with arbitrary file extensions. Now, I want to use these files in testing of other projects, e.g. Project2. I tried to illustrate my structure:
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)
| |-...
I added Project1 as a dependency in the POM of Project2. Both projects are built with Clean and Build from Netbeans 11, so I guess mvn clean, build & install.
I do test for the existance of the relevant file in Project1 with Project1.class.getClassLoader().getResource([FILE]) and all files seem to be at the correct location. However, if I use Project1.class.getClassLoader().getResource([FILE]) from within Project2, e.g. test1.java the respective FILE is not found.
System.out.println("1:" + Project1.class.getClassLoader().getResource(""));
System.out.println("2:" + Project1.class.getClassLoader().getResource("file1.txt"));
from within test1.java in Project2 gives:
1: file:[PATHTOPROJECT]/Project2/target/test-classes/
2: null
So I tried following the apporach in this description. My problem with the explanation is, that I do not have a plugin to perform the executions for maven-shared-archive-resources as described in the consumer-part. Thus, I do not know where to put them. In the example the executions are carried out inside <groupId>org.codehaus.mojo</groupId> with <artifactId>sql-maven-plugin</artifactId>.
I also had a look at this thread, but I get an Ant BuildException.
Could somebody be so kind and explain a maven novice, how I can share resources between different projects? Is there even another, simpler way?
POM.xml of Project2
I tried to strip the POM.xml down to a MWE.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- TOOL INFO -->
<groupId>org.test</groupId>
<artifactId>project2</artifactId>
<version>0.0.0.1</version>
<packaging>jar</packaging>
<!-- PROPERTIES -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- System -->
<java.version>1.8</java.version>
<junit.jupiter.version>5.3.1</junit.jupiter.version>
<junit.platform.version>1.0.0</junit.platform.version>
<maven.compiler.source>10</maven.compiler.source>
<maven.compiler.target>10</maven.compiler.target>
<maven.plugin.compiler.version>3.8.1</maven.plugin.compiler.version>
<maven.plugin.enforcer.version>3.0.0-M2</maven.plugin.enforcer.version>
<maven.plugin.release.version>2.5.3</maven.plugin.release.version>
<maven.plugin.resources.remote.version>1.6.0</maven.plugin.resources.remote.version>
<maven.plugin.surefire.version>3.0.0-M3</maven.plugin.surefire.version>
<!-- Own -->
<project1.version>0.0.0.1</project1.version>
</properties>
<!-- DEPENDENCIES -->
<dependencies>
<dependency>
<groupId>org.test</groupId>
<artifactId>project1</artifactId>
<version>${project1.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- BUILD -->
<build>
<!-- PLUGINS -->
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.plugin.compiler.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${maven.plugin.enforcer.version}</version>
<executions>
<execution>
<goals>
<goal>enforce</goal>
</goals>
</execution>
</executions>
<configuration>
<rules>
<requireJavaVersion>
<version>${java.version}</version>
</requireJavaVersion>
</rules>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>${maven.plugin.release.version}</version>
<configuration>
<localCheckout>true</localCheckout>
<pushChanges>false</pushChanges>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.plugin.surefire.version}</version>
</plugin>
</plugins>
</build>
</project>