【问题标题】:Issue with class-path in manifest file during deployment in Tomcat在 Tomcat 中部署期间清单文件中的类路径问题
【发布时间】:2015-05-14 12:56:47
【问题描述】:

我正在使用 Ant 构建 java 项目,并且我正在使用 Ivy 进行依赖管理。 ant build 中有两个选项用于在部署期间解决依赖关系。一种是 lib 模式,如果启用此模式,所有依赖的 jar 都会下载到项目的 WEB-INF/lib 文件夹中。其他是不下载任何 jar 的清单模式。在部署期间,MANIFEST.MF(具有所有依赖 jar 的类路径)文件将用于解析 jar。 项目在lib模式下运行正常,但启用manifest时,构建成功但部署失败。

请告诉我如何解决这个问题或可能是什么原因?

注意:Tomcat服务器默认启用VWL。

提前致谢。

【问题讨论】:

  • 您的 jar 必须放置在 MENIFEST.MF 中提到的类路径的某个位置,如果 jar 不在您的战争库中,则它们必须在您的容器库中 [tomcat 或 jboss 库]
  • 感谢纳文的回复。我检查了清单中的类路径,并且 jar 仅存在于该路径中。所以路径应该没有问题,我猜tomcat没有使用这个manifest文件。你的意思是 jars 必须是 lib 文件夹中的任何一个?
  • 那条路径是什么?是您的战争库还是网络服务器库位置?如果超出该位置,则必须在系统 class_path 环境变量中设置它们
  • 这可能不是一个好主意,仅针对特定项目,我们无法修改系统类路径。假设如果模式设置为清单,它会从清单文件中获取路径值并解决问题。现在的问题是,它没有采用该类路径。这些 jars 位于一个共享位置,该位置没有库。
  • 我怀疑类加载器会从容器外部挑选罐子。不过你可以试试。

标签: java eclipse ant ivy


【解决方案1】:

如果没有示例,您必须推测您的代码是什么样的。以下示例演示了使用 ANT manifestclasspath 任务来构造适合 jar 清单文件的类路径。 ivy“检索”任务填充包含罐子的相对目录:

  <target name="build" depends="compile">
    <ivy:retrieve pattern="${dist.dir}/lib/[artifact].[ext]"/>

    <manifestclasspath property="jar.classpath" jarfile="${dist.jar}">
      <classpath>
        <fileset dir="${dist.dir}/lib" includes="*.jar"/>
      </classpath>
    </manifestclasspath>

    <jar destfile="${dist.jar}" basedir="${build.dir}/classes">
      <manifest>
        <attribute name="Main-Class" value="${dist.main.class}"/>
        <attribute name="Class-Path" value="${jar.classpath}"/>
      </manifest>
    </jar>
  </target>

下面是一个详细的例子:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2017-04-12
    • 1970-01-01
    • 2012-12-16
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    相关资源
    最近更新 更多