Java Maven:打包和依赖项解析
我的Maven项目Project1只有一个依赖项,即UTIL(这也是我的本地Maven项目)。我必须将我的项目作为一个独立的jar分发,以便在客户端应用程序中使用。我使用以下maven汇编插件来生成fat jarJava Maven:打包和依赖项解析,java,maven,Java,Maven,我的Maven项目Project1只有一个依赖项,即UTIL(这也是我的本地Maven项目)。我必须将我的项目作为一个独立的jar分发,以便在客户端应用程序中使用。我使用以下maven汇编插件来生成fat jar <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration>
<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>
maven汇编插件
myMainClass
带有依赖项的jar
错误的
组装
包裹
仅有一个的
这个胖jar现在包含打包的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>
com.sample
乌提尔斯
1.0-快照
我的Utils依赖项:
<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>
com.fasterxml.jackson.datatype
jackson-datatype-jdk8
com.fasterxml.jackson.module
jackson模块参数名
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
2.9.8
org.apache.logging.log4j
log4japi
${version.log4j}
org.apache.logging.log4j
log4j型芯
${version.log4j}
org.apache.logging.log4j
log4j-slf4j-impl
${version.log4j}
javax.ws.rs
javax.ws.rs-api
2.1
将Maven项目导入另一台计算机后的过程是,如果该依赖项尚未在该计算机上下载,Maven可执行文件将再次在internet上下载该项目的依赖项?怎样Maven将查看C:\Users\\.m2
(Windows)或~\.m2
(Linux)目录,如果该JAR已经存在于该目录中。如果还不存在,Maven将下载每个还不存在的依赖项。通常,对于独立应用程序,您使用fat jar(jar with dependencies
),而不是作为依赖项的jar
否则,您将面临与您描述的问题完全相同的风险。提供依赖关系的最佳方法是将其放入可供用户使用的Maven存储库(您自己维护的存储库或类似MavenCentral的存储库)。然后用户可以声明您的
,将
放在他们的项目中,所有可传递的解析都由Maven完成。这不是个好主意,而是分别在单独的/ext/lib和主jar中构建依赖项。因此,您可以一次性部署依赖项,并在需要时随时部署项目jar文件。您应该始终将依赖项与应用程序打包,而不是从其他地方下载,除非它确实依赖于不同的最新版本的第三方库