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

时间:2011-01-22 13:53:01

标签: java eclipse reference manifest

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

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

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

我将导出3个主要项目,他们将转到不同的服务器以独立运行“java -jar myproject.jar”

每次我进行导出时,myUtilities.jar都没有在JAR中编译。如果我打开JAR,我可以看到它不存在。当我将它们移动到其他服务器时,这将成为一个问题。

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

这是我目前的清单文件:

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

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您应该使用“导出” - > “Runnable Jar”可以正确包含依赖项目。

有三种不同类型的可运行jar,具体取决于你想要一个包含所有类的jar文件,一个带有依赖jar的jar文件和清单中正确的Class-Path,以及一个带有依赖的jar文件封闭的罐子和一个特殊的类加载器理解这一点。

答案 2 :(得分:0)

复制到JAVA_HOME?这不是做任何事情的方式。你永远不应该这样做。

如果它是一个Web项目,您必须将JAR复制到每个项目的WEB-INF / lib中。

如果它不是Web项目,则必须将JAR与主JAR打包并将其添加到CLASSPATH。我假设main是一个带有清单的可执行JAR,或者你有一个脚本来执行main,所以你可以将CLASSPATH封装到它中。

答案 3 :(得分:0)

您还可以在可执行jar文件MANIFEST.MF中添加Classpath引用,或者为更有经验的用户使用maven程序集插件,该插件将创建artefact,其所有依赖项都打包在一个jar中。

答案 4 :(得分:-1)

  

每次我进行导出时,myUtilities.jar都没有在JAR中编译。如果我打开JAR,我可以看到它不存在。

你是如何创造它的? jar文件刚刚用manifest文件重命名为zip,所以请考虑自己构建它以防你的工具不适合你的需要。