我正在完成将一个独立的多项目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
如果外面有人可以指出这个问题的根源,我将永远是伟大的。
答案 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>
希望这对某人有所帮助。