我有一个JAR。它不是FAT JAR。它只包含我的课程。但是我的JAR依赖于azure-servicebus。我不想在我的jar中添加azure-servicebus并使其成为胖子。
我只希望当项目添加我的jar时,它应该自动下载azure-servicebus。
我正在使用Maven创建一个jar(没有依赖项)。
如何指定?这可能吗?
编辑:
我希望将我的jar添加为依赖项的项目应该下载azure-servicebus,而不必添加对azure-servicebus的依赖项,或者我将jar-servicebus打包在jar文件中。
答案 0 :(得分:1)
假设您的项目中已有一个Maven结构,则可以在pom.xml
中添加以下行:
<!-- https://mvnrepository.com/artifact/com.microsoft.azure/azure-servicebus -->
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-servicebus</artifactId>
<version>1.2.12</version>
</dependency>
如果您没有Maven结构,则需要生成一个。这通常可以在您使用的IDE中实现。
如果您希望生成的jar不具有服务总线,则可以使依赖项仅进行某种编译,这或多或少是以下问题的重复:Is there a Maven "compiler-only" scope for dependency artifacts。
但是,这意味着您的目标运行时必须以某种方式(可能通过-cp开关)包括类的定义。
从我的POV:如果您需要运行程序的依赖项,请在许可证允许的范围内添加它。
答案 1 :(得分:1)
如果我对您的理解正确,那么您所谈论的结构是:
some-project
取决于your-jar
,后者取决于azure-servicebus
。
如果some-project
声明了对your-jar
的Maven依赖关系,则它会自动获得azure-servicebus
作为依赖关系,因为Maven进行传递依赖关系解析。因此,当您构建some-project
时,azure-servicebus
将位于类路径上,并且如果some-project
是WAR / EAR,则azure-servicebus
将成为该WAR / EAR的一部分。
答案 2 :(得分:0)
我问这个问题时并不知道很重要的内容。
将jar放入工件中时,还必须在文件旁边(目录之外)放置一个相应的.pom文件。这个pom文件告诉依赖项目您所依赖的jar,因此本身也需要依赖。
此答案帮助我理解:
https://stackoverflow.com/a/50002072/4828463
感谢所有尝试过的人。