用于Web应用程序的JAR的MANIFEST.MF文件?

时间:2011-10-26 13:26:31

标签: java java-ee classpath manifest

我开发了一个实用程序库,将在我们的许多企业Java应用程序中使用。此库还有许多其他依赖项,这些依赖项也需要在类路径上。我想避免强迫我们的开发人员在他们的MANIFEST.MF文件中添加大量条目,而是让他们只包括我的库。有没有办法我的库的MANIFEST.MF文件可以引用它的依赖项,并让它们被将使用我的库的企业应用程序选中?

我尝试使用文件系统依赖项的完整路径在我的库的MANIFEST.MF文件中引用它们。那没用。我最终得到了所有依赖项的ClassNotFoundException错误。还有什么我应该尝试的吗?

4 个答案:

答案 0 :(得分:2)

创建Web应用程序时,通常将其放在WAR文件中。我们的想法是通过将jar添加到WAR内的/ WEB-INF / lib文件夹中来捆绑该WAR文件中所需的依赖项。 Web容器(如在Java EE应用程序服务器中)知道此结构,并将在类路径中包含这些jar。

如果您的库具有其他依赖关系,请告诉用户有关它的信息,如果许可证允许,则将它们与您的库重新分发,或者告诉他们从何处获取它们。当使用一个像样的工具来创建像IDE一样的Web应用程序,使用Ivy的Ant或Maven(或者这些的组合)时,处理和捆绑依赖项应该没问题。

答案 1 :(得分:0)

我用很多工具完成了这项工作。这是一个真正可怕的黑客,但似乎可靠地工作。

  • 给他们一个特殊的清单来使用。类似的东西:

    清单 - 版本:1.0 Main-Class:com.xxx.yyy.zzz.YourSpecialClassThatHacksTheClassPath Real-Main-Class:com.ppp.qqq.TheirMainClass

  • 在你的特殊课程中,使用类路径(不容易),阅读清单“Real-Main-Class”条目(稍微容易一些)并从中启动它们的主要部分(根本不是很难)

显然,这不适用于.war文件。

答案 2 :(得分:0)

或者,只要您坚持非常小心格式,即在每个“file:”等之前坚持正好两个空格,这就有效:

Manifest-Version: 1.0
Main-Class: package.TestClass
Class-Path:  file:/D:/WebServer/Tomcat/shared/lib/BlueCove.jar
  file:/D:/WebServer/Tomcat/shared/lib/classes12.jar
  file:/D:/WebServer/Tomcat/shared/lib/comm.jar
  file:/D:/WebServer/Tomcat/shared/lib/FTP.jar
  file:/D:/WebServer/Tomcat/shared/lib/FTP2.jar
  file:/D:/WebServer/Tomcat/shared/lib/iText.jar
  file:/D:/WebServer/Tomcat/shared/lib/j2ee.jar
  file:/D:/WebServer/Tomcat/shared/lib/jmxremote.jar
  file:/D:/WebServer/Tomcat/shared/lib/jmxri.jar
  file:/D:/WebServer/Tomcat/shared/lib/jmxtools.jar
  file:/D:/WebServer/Tomcat/shared/lib/jpos15.jar
  file:/D:/WebServer/Tomcat/shared/lib/js.jar
  file:/D:/WebServer/Tomcat/shared/lib/mail.jar
...
  file:/C:/WebServer/Tomcat/shared/lib/soap.jar
  file:/C:/WebServer/Tomcat/shared/lib/sqljdbc.jar
  file:/C:/WebServer/Tomcat/shared/lib/tools.jar

答案 3 :(得分:0)

即使我遇到同样的问题。如上所述,解决方案是在文件之后有两个空格:/和.jar文件之后的一个空格,最后按回车键。

我知道这不是一个简洁的解决方案,但它确实有效。享受。