Java Maven:分发Maven jar

Java Maven:分发Maven jar,java,maven,Java,Maven,我从一个Maven项目中创建了一个sample.jar,其中包含使用Maven assembly插件所需的所有依赖项。我通过使用mvn install:install文件并在客户机应用程序的pom.xml中包含依赖项,在客户机应用程序中使用这个jar。这很有效 但是有没有一种方法可以使我不必将sample.jar构建为胖jar呢 相反,如果sample.jar的所有依赖项都可以从Maven central repo获得,那么让客户端应用程序的pom通过读取sample.jar的pom.xml来解

我从一个Maven项目中创建了一个sample.jar,其中包含使用Maven assembly插件所需的所有依赖项。我通过使用mvn install:install文件并在客户机应用程序的pom.xml中包含依赖项,在客户机应用程序中使用这个jar。这很有效

但是有没有一种方法可以使我不必将sample.jar构建为胖jar呢

相反,如果sample.jar的所有依赖项都可以从Maven central repo获得,那么让客户端应用程序的pom通过读取sample.jar的pom.xml来解析sample.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>

在您的choice Central存储库中,您需要同时上传pom和瘦jar

当您在客户机项目中声明一个依赖项时,Maven将自动查找这两个依赖项。它将使用pom来确定可传递的依赖项,并将根据jar进行编译。

请检查。值得补充的是,如果您使用jar的精简版本,mvn install命令中的generatePom或pomFile选项对于Maven能够解析可传递的依赖关系至关重要。或者,您可以将瘦jar上传到一个人工制品中,如果可能的话,这个人工制品也应该这样做

有用的参考资料:


这里有几件事需要注意

您没有指定如何准确地生成胖jar,但通常maven assembly插件会在它创建的瘦jar文件旁边创建一个附加文件。您可以通过查看项目的目标文件夹来检查情况是否如此。 除非另外配置,否则maven assembly插件也会使它创建的任何工件成为项目工件。运行mvn install时,所有项目工件都将安装在本地Maven repo中。这意味着你可能已经在当地的Maven回购协议中同时拥有了瘦罐子和胖罐子。 假设上述语句在您的特定情况下成立,并且您的客户机项目有一个没有特殊类型、限定符的标准依赖项记录。。。很可能它已经使用了薄罐。您可以通过在客户机项目中运行mvn dependency:tree来检查是否存在这种情况。
如果已经有pom,则不必生成pom。OP已经是一个Maven项目了。请参阅第二个链接的第一行。有时,您没有第三方工件的POM。请注意,提供了三个选项:1。在这种情况下不需要generatePom,2。pomFile,3。人工部署。假设thinsample.jar是使用mvn安装安装的:安装文件-Dfile=thinsample.jar-DgroupId=com.example-DartifactId=thinsample-dpackage=jar-Dversion=1.0。生成的.pom不包含任何依赖项信息。如果是这种情况,则需要存在pomFile选项来引用原始pom.xml。有时,上传到工件不是一个可行的选择,这就是为什么我们有所有这些选择。为了澄清您的问题,JAR是通过mvn install:install文件安装的,还是仅仅使用源代码中的mvn安装?根据这一点,解决方案可能会有所不同。将瘦jar部署到工件库是可行的选择吗?通过mvn安装:安装文件感谢@user2761431的澄清。使用该命令来安装sample-thin.jar,如果包含选项-useFile=pom.xml,并引用sample-thin.jar的pom.xml,那么应该很好地进行安装。在安装jar的.m2存储库下,它还将生成一个包含所有依赖项的.pom文件。当您在客户机应用程序中包含瘦JAR时,Maven现在应该能够解析可传递的依赖项,从而不再需要胖JAR。请结帐。