Maven: совместное использование ресурсов между проектами - PullRequest
0 голосов
/ 21 мая 2019

В настоящее время я переключаюсь с 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>

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Изменение расположения ресурсов в проекте 1. Обратите внимание, что перемещено из test dir в main.

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

Затем в POM проекта 2 добавьте проект 1 в качестве тестовой зависимости:

    <dependency>
        <groupId>org.test</groupId>
        <artifactId>project1</artifactId>
        <version>${project1.version}</version>
        <scope>test</scope>
    </dependency>
0 голосов
/ 21 мая 2019

Вместо совместного использования ресурсов создайте другой проект под названием «onlyresources» или что-то в этом роде, и внутри проекта сохраните только эти файлы * .txt, * .dat.Другие проекты будут зависеть от определенного выше проекта, который называется «только ресурсы».В случае многомодульного проекта maven, убедитесь, что добавили зависимость к другим проектам.Этот проект, я имею в виду «только ресурсы», должен быть первым проектом, который должен быть построен первым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...