Зависимости проекта в мультипроекте Eclipse m2e против пакета с манифестом - PullRequest
0 голосов
/ 06 февраля 2019

Я заканчиваю перенос автономной многопроектной Java из Ant в Maven.Структура моих проектов похожа на следующую:

parent-project
|_ Project A
|  |
|_Project B
|_Project C

В родительском проекте нет кода, но я определяю в DependencyManager наиболее распространенные используемые зависимости и их версии.ProjectA POM использует зависимости, определенные в parent-project и ProjectB, а также вызывает методы из ProjectA.

Я могу прекрасно выполнить свое настольное приложение из Eclipse как проект Maven (цели: exec: java).Вкладка Иерархия зависимостей, предоставляемая m2e, показывает правильный порядок зависимостей, и он такой же, как и зависимости: build-classpath.

dependency:build-classpath tells Maven to output the path of the dependencies from the local repository in a classpath format to be used in java -cp. The classpath file may also be attached and installed/deployed along with the main artifact.

Однако, несмотря на то, что зависимости моего проекта кажутся правильными, когда я запускаю автономное приложение как MavenОсновной проект из Eclipse, это не то же самое, когда я упаковываю jar с его зависимостями jar в подкаталог (созданный с помощью maven-jar-plugin).

MyApp.jar
|_ \lib
   |_ MyApp dependencies 
   |_ Maven projects jars
   |_ Maven projects jars dependencies

Мой файл манифеста включает classpath, который является эквивалентом для выполнения «mvn dependency: resolv», но мне все еще не удается выяснить, откуда берутся эти jar-файлы (даже меняя POMкажется, не имеет никакого влияния на это).Мое приложение удается запустить, но у меня много проблем с библиотеками времени выполнения, потому что оно не использует ту, для которой оно предназначено.

dependency:resolve tells Maven to resolve all dependencies and displays the version

Если есть кто-то, кто может указать источникэта проблема, я был бы вечно рад.

1 Ответ

0 голосов
/ 12 февраля 2019

Я все-таки нашел решение.

Проблема появилась только при вызове maven-dependency-plugin для копирования зависимостей.Я удаляю выполнение этого плагина и заменяю ресурс копирования на maven-resources-plugin.

До (не работает):

  <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>jar-with-dependencies</id>
    <formats>
        <format>dir</format> 
    </formats>
    <!-- Dependencies properties -->
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
            <useProjectArtifact>false</useProjectArtifact>
            <unpack>false</unpack>
        </dependencySet>
    </dependencySets>
    <!-- To avoid include the target name as a root directory -->
    <includeBaseDirectory>false</includeBaseDirectory>

    <fileSets>
        <!-- Copy resources from resources to target -->
        <fileSet>
            <directory>../AnotherJavaProject/src/main/resources/utils/</directory>
            <outputDirectory>utils</outputDirectory>
        </fileSet>
        <!-- ...more resources here -->

        <!-- Copy the .exe to the target folder -->
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory></outputDirectory>
            <includes>
                <include>*.exe</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>

После (работает):

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>package</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/${project.build.finalName}</outputDirectory>
                <resources>
                    <resource>
                    <!-- Copy resources from resources to target -->    <directory>../AnotherJavaProject/src/main/resources/utils/</directory>
                        <targetPath>utils</targetPath>
                    </resource>
                    <!-- ...more resources here -->

                    <!-- Copy the .exe to the target folder -->
                    <resource>
                        <directory>${project.build.directory}</directory>
                        <include>*.exe</include>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

Надеюсь, это поможет кому-нибудь.

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