【发布时间】:2020-01-14 22:58:55
【问题描述】:
我的 Maven 项目 Project1 只有一个依赖项,即 Utils(这也是我的本地 Maven 项目)。我必须将我的项目作为独立 jar 分发以在客户端应用程序中使用。我使用以下 maven 程序集插件来生成 fat jar。
<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>
这个胖 jar 现在包含了打包好的 Utils 项目的所有依赖项。如果客户端应用程序也使用 Maven 依赖项,但版本不同,这将带来依赖项解析问题。
有没有一种方法可以让我在没有依赖的情况下打包 Utils 并让 Maven 在客户端位置下载 Utils 依赖项?
我的 Project1 依赖项:
<dependencies>
<dependency>
<groupId>com.sample</groupId>
<artifactId>Utils</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
我的 Utils 依赖项:
<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>
【问题讨论】:
-
这不是一个好主意,而是在单独的 /ext/lib 和您的主 jar 中分别构建依赖项。因此,您可以在需要时部署依赖项和项目 jar 文件
-
您应该始终将依赖项与您的应用程序打包在一起,而不是让它从其他地方下载,除非它真的依赖于不同的最新版本的 3'rd 方库