如何告诉项目下载内部依赖项?

时间:2019-03-22 16:51:03

标签: java maven jar

我有一个JAR。它不是FAT JAR。它只包含我的课程。但是我的JAR依赖于azure-servicebus。我不想在我的jar中添加azure-servicebus并使其成为胖子。

我只希望当项目添加我的jar时,它应该自动下载azure-servicebus。

我正在使用Maven创建一个jar(没有依赖项)。

如何指定?这可能吗?

编辑:

我希望将我的jar添加为依赖项的项目应该下载azure-servicebus,而不必添加对azure-servicebus的依赖项,或者我将jar-servicebus打包在jar文件中。

3 个答案:

答案 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

感谢所有尝试过的人。