В настоящее время я переключаюсь с ant на maven для более крупной библиотеки, состоящей из пары проектов.Я довольно новичок в Maven.
В связи с тем, что для нескольких библиотек требуются одни и те же внешние файлы в качестве входных данных для тестирования, я решил создать отдельный проект, содержащий ресурсы (Project1), как объяснено здесь .Project1
содержит только тестовые ресурсы, ничего больше, кроме класса project1.java
с пустым методом main.Файлы ресурсов представляют собой текстовые и двоичные файлы ASCII с произвольными расширениями файлов.Теперь я хочу использовать эти файлы при тестировании других проектов, например Project2.Я попытался проиллюстрировать свою структуру:
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
.Оба проекта построены с использованием Clean and Build из Netbeans 11, поэтому я предполагаю, что 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
в Project2
дает:
1: file:[PATHTOPROJECT]/Project2/target/test-classes/
2: null
Итак, я попытался следовать за apporach в этом описании .Моя проблема с объяснением состоит в том, что у меня нет plugin
для выполнения executions
для maven-shared-archive-resources
, как описано в потребительской части.Таким образом, я не знаю, где их поставить.В примере выполнения выполняются внутри <groupId>org.codehaus.mojo</groupId>
с <artifactId>sql-maven-plugin</artifactId>
.
Я также посмотрел на этот поток , но я получил Ant BuildException
.
Может ли кто-нибудь быть таким добрым и объяснить новичку, как я могу распределять ресурсы между различными проектами?Есть ли еще один, более простой способ?
POM.xml
Project2
Я пытался раздеть POM.xml
до 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>