Maven 2 用Maven项目交付单个jar

Maven 2 用Maven项目交付单个jar,maven-2,jar,Maven 2,Jar,我想向我的客户交付一个.jar文件,但我的项目目前是用Maven构建的,我有几个模块,每个模块生成一个.jar文件 我知道嵌套不同的.jar文件不是一个好主意,所以我不确定如何实现这一点 有什么想法吗?实际上,嵌套.jar文件是不可能的。罐子里不能有其他的罐子 .war和.ear文件可以包含JAR,如果您正在交付J2EE应用程序,这是一个很好的解决方案 但是,如果您的应用程序只是J2SE,我建议您查看。顾名思义,它允许您为构建创建一个单一的二进制发行版。首先,问问自己是否有很好的理由将应用程序及

我想向我的客户交付一个.jar文件,但我的项目目前是用Maven构建的,我有几个模块,每个模块生成一个.jar文件

我知道嵌套不同的.jar文件不是一个好主意,所以我不确定如何实现这一点


有什么想法吗?

实际上,嵌套.jar文件是不可能的。罐子里不能有其他的罐子

.war和.ear文件可以包含JAR,如果您正在交付J2EE应用程序,这是一个很好的解决方案


但是,如果您的应用程序只是J2SE,我建议您查看。顾名思义,它允许您为构建创建一个单一的二进制发行版。

首先,问问自己是否有很好的理由将应用程序及其所有依赖项打包到一个jar中。我还没有找到一个很好的理由(大多数原因都与组织政策的愚蠢或纯粹的无知有关)。方法是将库保存在它们自己的jar中,并提供一个包含所有库和应用程序的.zip/.tar.gz

  • 带有 在中适当地设置类路径 您的MANFIEST.MF文件
  • a.bat/.sh 调用java并生成 基于 你的部门
  • 相反,使用JNLP(更好地称为JavaWebStart)


    如果您真的想让maven将所有依赖项和应用程序捆绑在一个jar下,那么您想要使用的是。图中还显示了如何实现这一点。

    如果您真的想朝这个方向发展,有几种方法:

    • 使用以及预定义的程序集描述符(这将解包依赖项)
    • 使用(与上面的类似,但提供更大的灵活性)
    • 使用(使用及其自定义类加载器允许JAR嵌套)

    根据您的具体要求和限制,您可能会选择其中一种。

    您也可以尝试Maven Shade插件。

    有关如何使用Shade插件的一般说明,请参见使用页面。下面给出的示例中描述了一些更具体的用例。最后但并非最不重要的一点是,用户偶尔会向插件的wiki页面提供额外的示例、提示或勘误表

    如果您对插件的使用仍有疑问,请随时联系用户邮件列表。邮件列表中的帖子已存档,并且可能已经包含您问题的答案,作为旧线程的一部分。因此,也值得浏览/搜索邮件存档


    如果您觉得插件缺少一个功能或有缺陷,您可以在我们的问题跟踪程序中填写一个功能请求或错误报告。创建新问题时,请全面描述您的担忧。特别是对于修复bug,开发人员能够重现您的问题是至关重要的。出于这个原因,我们非常感谢完整的调试日志、POM或附加到该问题的小演示项目。当然,补丁也是受欢迎的。贡献者可以从我们的源代码库中查看该项目,并在帮助Maven的指南中找到补充信息。

    感谢您的回复。我正在为客户机提供一个Web服务API,实际上为了让Java客户机的生活更轻松,我们希望提供一个.jar,他们也可以从WSDL生成代码。这在一些Google Web服务中并不少见。