Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven:打包和依赖项解析_Java_Maven - Fatal编程技术网

Java Maven:打包和依赖项解析

Java Maven:打包和依赖项解析,java,maven,Java,Maven,我的Maven项目Project1只有一个依赖项,即UTIL(这也是我的本地Maven项目)。我必须将我的项目作为一个独立的jar分发,以便在客户端应用程序中使用。我使用以下maven汇编插件来生成fat jar <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration>

我的Maven项目Project1只有一个依赖项,即UTIL(这也是我的本地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>

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文件。您应该始终将依赖项与应用程序打包,而不是从其他地方下载,除非它确实依赖于不同的最新版本的第三方库