我的Maven项目Project1仅具有一个依赖项,即Utils(这也是我的本地Maven项目)。我必须将我的项目作为独立jar分发,以在客户端应用程序中使用。我使用以下maven程序集插件来生成胖子。
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>myMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
此胖子缸现在包含打包的Utils项目的所有依赖项。如果客户端应用程序也使用Maven依赖项,但版本不同,则会带来依赖项解决问题。
有没有一种方法可以打包没有依赖项的Utils,并让Maven在客户端位置下载Utils依赖项?
我的Project1依赖项:
<dependencies>
<dependency>
<groupId>com.sample</groupId>
<artifactId>Utils</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
我的实用程序依赖项:
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${version.log4j}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${version.log4j}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${version.log4j}</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
答案 0 :(得分:0)
通常,您对独立应用程序使用胖jar(jar-with-dependencies
),而不是对依赖关系的jar使用。
否则,您将完全承担所描述问题的风险。提供依赖关系的最佳方法是将其放在可供用户使用的Maven存储库中(您可以自己维护,也可以类似MavenCentral)。然后,用户只需声明您的<repository>
,将<dependency>
放入他们的项目中,所有传递解析都将由Maven完成。
答案 1 :(得分:-1)
将Maven项目导入另一台计算机后的过程是,如果尚未在该计算机上下载Maven可执行文件的依赖关系,则该可执行文件将再次在Internet上下载该项目的依赖关系?怎么样?如果该目录中已经存在该JAR,则Maven将查看C:\Users\<user>\.m2
(Windows)或~\.m2
(Linux)目录。如果尚不存在,则Maven将下载尚不存在的每个依赖项。