Eclipse M2e多项目与带有清单的软件包中的项目依赖关系

时间:2019-02-06 17:14:31

标签: java eclipse maven

我正在完成将一个独立的多项目Java从Ant迁移到Maven。我的项目的结构类似于以下内容:

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

在父项目中没有代码,但是我在DependencyManager中定义了最常用的依赖项及其版本。 ProjectA POM也使用父项目和ProjectB中定义的权限,并从ProjectA调用方法。

我可以从Eclipse作为Maven项目完美地执行我的桌面应用程序(目标:exec:java)。 m2e提供的“ Dependency Hierarchy”选项卡显示了正确的依赖顺序,并且与dependency: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.

但是,尽管当我从Eclipse作为Maven主项目启动独立应用程序时,我的项目执行情况似乎是正确的,但是当我将带有jar依赖项的jar打包到一个子目录(使用maven-jar创建)时,情况并不相同-插入)。

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

我的清单文件包含一个类路径,该类路径等效于执行“ mvn依赖项:解决”,但我仍然无法弄清楚这些jar的顺序来自哪里(即使更改POM似乎也没有对它有任何影响)。我的应用程序可以运行,但是运行库有很多问题,因为它没有使用本应使用的库。

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

如果外面有人可以指出这个问题的根源,我将永远是伟大的。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决办法。

仅在调用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>

希望这对某人有所帮助。