Java 导出使用公共项目的JAR项目

Java 导出使用公共项目的JAR项目,java,eclipse,reference,manifest,Java,Eclipse,Reference,Manifest,我在Eclipse中创建了4个不同的Java项目 其中一个包含其他3个项目使用的所有my Utilities和Helper方法 我不想将同一个包复制到每个项目中3次,因为如果必须的话,我希望能够在一个地方编辑它。因此,我引用了所有其他3个项目中的myUtilities项目 我将导出3个主要项目,它们将作为“java-jarmyproject.jar”独立运行到不同的服务器上 每次我进行导出时,myUtilities.jar都不会在jar中编译。如果我打开罐子,我可以看到它不在那里。当我将它们移动

我在Eclipse中创建了4个不同的Java项目

其中一个包含其他3个项目使用的所有my Utilities和Helper方法

我不想将同一个包复制到每个项目中3次,因为如果必须的话,我希望能够在一个地方编辑它。因此,我引用了所有其他3个项目中的myUtilities项目

我将导出3个主要项目,它们将作为“java-jarmyproject.jar”独立运行到不同的服务器上

每次我进行导出时,myUtilities.jar都不会在jar中编译。如果我打开罐子,我可以看到它不在那里。当我将它们移动到其他服务器时,这将是一个问题

有没有办法将包添加到JAR的源代码中?或者我必须将myUtilities.jar复制到每个服务器的JAVA_主页中

这是我当前的清单文件:

Manifest-Version: 1.0
Main-Class: com.elcool.process.alpha.RetrieverMain

复制到JAVA_主页?这不是做任何事情的方式。你不应该那样做

如果它是一个web项目,则必须将JAR复制到每个项目的web-INF/lib中


如果它不是一个web项目,那么必须将该JAR与主JAR打包,并将其添加到类路径中。我假设main是一个带有清单的可执行JAR,或者您有一个脚本来执行main,这样您就可以将类路径封装到其中。

复制到JAVA\u HOME?这不是做任何事情的方式。你不应该那样做

如果它是一个web项目,则必须将JAR复制到每个项目的web-INF/lib中


如果它不是一个web项目,那么必须将该JAR与主JAR打包,并将其添加到类路径中。我假设main是一个带有清单的可执行JAR,或者您有一个脚本来执行main,这样您就可以将类路径封装到其中。

您可以在项目(myproject.JAR)的清单中放置对外部实用程序JAR(您问题中的myUtility.JAR)的引用。清单是项目jar中的一个文本文件,许多构建工具支持向其中添加信息


通过这种方式,您可以编译一次实用程序jar,在项目中引用它,并将其与三个主要项目一起部署,可能在同一目录或附近的子目录中。

您可以在项目(myproject.jar)的清单中放置对外部实用程序jar的引用。清单是项目jar中的一个文本文件,许多构建工具支持向其中添加信息

通过这种方式,您可以编译一次实用程序jar,在项目中引用它,并将其与三个主要项目一起部署,可能在同一目录或附近的子目录中。

您应该使用“导出”->“可运行jar”来正确包含依赖项目

有三种不同类型的可运行jar,具体取决于您想要一个包含所有类的jar文件,一个包含依赖jar和清单中正确类路径的jar文件,以及一个包含依赖jar的jar文件和一个理解这一点的特殊类加载器。

您应该使用“导出”->“可运行jar”正确包含相关项目


有三种不同类型的可运行jar,这取决于您想要一个包含所有类的jar文件,一个包含依赖jar的jar文件以及清单中正确的类路径,一个包含依赖jar的jar文件,一个特殊的类加载器理解这一点。

您也可以在可执行jar文件MANIFEST.MF中添加类路径引用,或者对于更有经验的用户,可以使用maven assembly plugin,该插件将创建一个jar中包含所有依赖项的人工制品。

您也可以添加可执行jar文件MANIFEST.MF中的类路径引用,或者对于更有经验的用户,使用maven assembly plugin,该插件将创建工件,其所有依赖项都打包在一个jar中

每次我进行导出时,myUtilities.jar都不会在jar中编译。如果我打开罐子,我可以看到它不在那里

你是如何创造它的?JAR文件只是用清单文件重命名ZIP,所以考虑自己构建它,以防您的工具不适合您的需要。 每次我进行导出时,myUtilities.jar都不会在jar中编译。如果我打开罐子,我可以看到它不在那里


你是如何创造它的?JAR文件只是用清单文件重命名ZIP,所以考虑一下自己的构建,以防您的工具不适合您的需要。

这将是最容易的,但是它将编译所有引用,而我不需要所有这些引用。我只需要将myUtilities.jar添加到jar中。如果您设置了项目A、B、C,那么它们只引用您的实用程序项目,并仅在项目A中进行导出,则不需要。我想B和C不了解A?是的,A,B和C彼此不了解。但是他们使用了其他来自另一个应用程序的常见Java jar和API jar,而我在编译的jar中不需要这些jar。然后我建议使用“文件夹中包含依赖jar的单个jar”,并在稍后的部署步骤中删除您不需要的jar。这很容易用ant编写脚本。这将是最简单的,但它将编译所有引用,我不需要所有引用。我只需要将myUtilities.jar添加到jar中。如果您设置了项目A、B、C,那么它们只引用您的实用程序项目,并仅在项目A中进行导出,则不需要。我想B和C不了解A?是的,A,B和C彼此不了解。但是他们使用了其他来自另一个应用程序的常见Java jar和API jar,而我在编译的jar中不需要这些jar。然后我建议使用“文件夹中包含依赖jar的单个jar”,并在稍后的部署步骤中删除您不需要的jar。这很容易用ant编写脚本。JAR将独立运行,所有其他JAR(JavaUTIL、JavaIO…等等)都在