[英]Maven : Packaging and Dependency Resolution
我的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>
通常,對於獨立的應用程序,應使用胖罐子( jar-with-dependencies
),而不是將罐子當作依賴項。
否則,您將完全承擔所描述問題的風險。 提供依賴關系的最佳方法是將其放在可供用戶使用的Maven存儲庫中(您可以自己維護,也可以類似MavenCentral)。 然后,用戶只需聲明您的<repository>
,並將<dependency>
放入其項目中,所有傳遞解析都將由Maven完成。
將Maven項目導入到另一台計算機后的過程是,如果尚未在該計算機上下載依賴項,則Maven可執行文件將再次在Internet上下載該項目的依賴項? 怎么樣? 如果該目錄中已經存在該JAR,則Maven將查看C:\\Users\\<user>\\.m2
~\\.m2
(Windows)或~\\.m2
(Linux)目錄。 如果尚不存在,則Maven將下載尚不存在的每個依賴項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.