簡體   English   中英

Maven:打包和依賴性解析

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM