Ant + 类路径问题

2023-12-23

我已经编写了一个 ANT 脚本,最后正在构建 jar

这是 jar 部分的建筑

<jar jarfile="${destination}/@{name}.jar">
     <fileset dir="${output}">
         <include name="abc/xyz/@{name}/**"/>
     </fileset>
     <zipfileset dir="lib" prefix="lib/"/>
     <manifest>
          <attribute name="Main-Class" value="com.abc.xyz.HelloWorld"/>
          <attribute name="Class-Path" value=".:lib/activation.jar:lib/antlr-2.7.6.jar:lib/asm-attrs.jar:lib/asm.jar:lib/cglib-2.1.3.jar:lib/commons-collections-2.1.1.jar:lib/commons-logging-1.1.jar:lib/dom4j-1.6.1.jar:lib/ehcache-1.2.3.jar:lib/ejb3-persistence.jar:lib/hibernate-annotations.jar:lib/hibernate-commons-annotations.jar:lib/hibernate-entitymanager.jar:lib/hibernate-tools.jar:lib/hibernate3.jar:lib/javassist.jar:lib/jdbc2_0-stdext.jar:lib/jta.jar:lib/mysql-connector-java-5.1.5-bin.jar"/>
     </manifest>
</jar>

现在,当我尝试执行它执行的包时,但每当发送数据时我都会收到错误。

java.lang.NoClassDefFoundError: javax/persistence/NoResultException

但是持久性 jar 存在于类路径中,我已经尝试了类路径的所有组合,但徒劳。

但在另一个系统中我尝试不创建像这样的罐子

set classpath=.;lib/activation.jar;lib/antlr-2.7.6.jar;lib/asm-attrs.jar;lib/asm.jar;lib/cglib-2.1.3.jar;lib/commons-collections-2.1.1.jar;lib/commons-logging-1.1.jar;lib/dom4j-1.6.1.jar;lib/ehcache-1.2.3.jar;lib/ejb3-persistence.jar;lib/hibernate-annotations.jar;lib/hibernate-commons-annotations.jar;lib/hibernate-entitymanager.jar;lib/hibernate-tools.jar;lib/hibernate3.jar;lib/javassist.jar;lib/jdbc2_0-stdext.jar;lib/jta.jar;lib/mysql-connector-java-5.1.5-bin.jar
java com.abc.xyz.HelloWorld

这很好用。

在 Mac 中,当我尝试这样操作时:

java -cp .:lib/activation.jar:lib/antlr-2.7.6.jar:lib/asm-attrs.jar:lib/asm.jar:lib/cglib-2.1.3.jar:lib/commons-collections-2.1.1.jar:lib/commons-logging-1.1.jar:lib/dom4j-1.6.1.jar:lib/ehcache-1.2.3.jar:lib/ejb3-persistence.jar:lib/hibernate-annotations.jar:lib/hibernate-commons-annotations.jar:lib/hibernate-entitymanager.jar:lib/hibernate-tools.jar:lib/hibernate3.jar:lib/javassist.jar:lib/jdbc2_0-stdext.jar:lib/jta.jar:lib/mysql-connector-java-5.1.5-bin.jar com.abc.xyz.HelloWorld

它也工作得很好:(,但是当我创建罐子的那一刻它就停止了。

我该如何解决这个问题?


首先,“Main-Class”和“Class-Path”清单条目仅用于可执行 jar。换句话说,当您按如下方式调用 java 时:

java -jar foo.jar

使用 java 调用-cp选项意味着您要提供自己的类路径,并注意您还必须在命令行上提供主类。

其次,您需要将“:”字符替换为空格:

<attribute name="Class-Path" value=". lib/activation.jar lib/antlr-2.7.6.jar lib/asm-attrs.jar lib/asm.jar lib/cglib-2.1.3.jar lib/commons-collections-2.1.1.jar lib/commons-logging-1.1.jar lib/dom4j-1.6.1.jar lib/ehcache-1.2.3.jar lib/ejb3-persistence.jar lib/hibernate-annotations.jar lib/hibernate-commons-annotations.jar lib/hibernate-entitymanager.jar lib/hibernate-tools.jar lib/hibernate3.jar lib/javassist.jar lib/jdbc2_0-stdext.jar lib/jta.jar lib/mysql-connector-java-5.1.5-bin.jar"/>

最后我建议使用清单类路径为您构建类路径字符串的任务。它将正确解析您的 jar 与其运行时依赖项之间的任何相关链接。

<manifestclasspath property="mf.classpath" jarfile="${destination}/@{name}.jar">
    <classpath>
        <fileset dir="lib" includes="*.jar"/>
    <classpath>
</manifestclasspath>

<jar jarfile="${destination}/@{name}.jar">
    <fileset dir="${output}">
       <include name="abc/xyz/@{name}/**"/>
    </fileset>
    <zipfileset dir="lib" prefix="lib/"/>
    <manifest>
       <attribute name="Main-Class" value="com.abc.xyz.HelloWorld"/>
       <attribute name="Class-Path" value=". ${mf.classpath}"/>
    </manifest>
</jar>

最后一个观察...为什么要在 jar 中包含 lib 目录的内容? (jar命令中的zipfileset标签?)

这似乎是不必要的,您所需要做的就是确保运行时依赖项存在于类路径清单条目中指定的 lib 目录中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ant + 类路径问题 的相关文章

随机推荐

  • CAGradientLayer 显示为纯色

    我试图在视图上设置渐变背景 但下面的代码使 UIView 显示为纯黑色 如果我将白色更改为绿色 渐变将正确显示 将图层的背景颜色更改为 greenColor 会使视图显示为纯绿色 我的猜测是我正在处理某种透明度问题 但我无法解决它 CAGr
  • AttributeError:“PathDistribution”对象没有属性“name”

    我正在尝试使用运行一个简单的工作流程celery并使用this https docs celeryproject org en stable userguide canvas html文档 我正在使用链按顺序运行任务 工作流程如下 提取文件
  • 强制移动版网站为WebView

    我正在将 URL 加载到 Web 视图中以将其显示到我的应用程序中 我遇到的问题是 网站并不总是能识别出我是一部手机 为什么会这样 到底如何强制webview发送到我是手机的网站呢 目前我正在这样做 webview getSettings
  • JSON序列化类继承列表上的属性[重复]

    这个问题在这里已经有答案了 我有一个模型如下 public class TestResultModel public bool Successful get set public string ErrorMessage get set pu
  • if...!true 在 nunjucks 中进行条件渲染

    if true条件句就像魅力一样此处概述 https mozilla github io nunjucks templating html if在文档中 但如果我尝试做类似的事情 if posts length i No project p
  • Python:使用三角函数尽可能高效地估计 Pi

    我有一个作业 需要以计算有效的方式近似 Pi 这是我的策略 我使用单位圆 等腰三角形的角平分线以及 sin 的定义 我画了一张图 例如 如果我想使用六边形 6 点 6 条边 我只需要计算a 0 5 sin 2 pi 2 x 并将其乘以 2
  • 多个选项卡中的 MVC 表单验证 - 自动跳转到带有验证错误的选项卡?

    我有带有多个选项卡的选项卡条 在每个选项卡中 我都有许多文本字段供用户输入 选项卡条被表单包围 并且位于提交按钮下方 我对模型属性的验证进行了注释 使用 Jquery 验证可以很好地进行验证 但是 如果用户在某个字段中输入错误 转到另一个选
  • 参考脚本容器元素?

    我想知道是否有办法获取包含脚本的 DOM 元素的句柄 所以如果我有
  • 合并来自开发和生产数据库的果园内容

    我正在寻找以下问题的解决方案 我们前段时间开发了生产环境上的果园场地 所有站点结构 小部件 部件 图层 都是在首次发布之前创建的 现在我们要添加带有附加页面和图层的子站点 我们希望在开发环境中完成这项工作 并在发布之前对其进行测试 在最近的
  • 所有组合的 Matlab 循环

    我是 Matlab 新手 这似乎超出了我的能力范围 提前感谢您的帮助和感谢 基本上 我有一个带有列标题的多列数据集 列号可能因数据集而异 需要迭代列的所有组合 例如 A B A C B C B D 等 并运行公式 在本例中它是一个相关公式
  • DDD 基础设施服务

    我正在学习 DDD 但我对基础设施层有点迷失 据我了解 所有优秀的 DDD 应用程序 应该有 4 层 表示层 应用程序层 领域层和基础设施层 应使用存储库访问数据库 存储库接口应该位于域层和存储库实现中 位于基础设施中 参考DDD 在哪里保
  • 类类型非类型模板参数初始化不编译

    我的印象是 在新的 C 20 标准下 以下内容应该成为有效代码 struct Foo int a b template
  • Java 日志记录与 Log4J [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否仍然值得将 log4j 库添加到 Java 5 项目中只是为了记录日志 假设文件有一些例外 并有一些不错的翻转设置 或者标准的 util l
  • 使用 SQLite 获取本周的数据

    我试图在 sqlite 中获取本周的数据 但似乎我错过了一些东西 因为我得到了错误的信息 更具体地说 我想检索数据库中具有时间戳的所有数据 其日期属于本周 本周可能从周日或周一开始 即 26 2 12 03 03 12 目前我正在使用这样的
  • 即使有垂直滚动,如何将绝对定位的项目保留在网站底部?

    我有一个具有绝对位置的页脚 footer position absolute bottom 0 height 43px padding 0 background color 333333 width 100 color 737373 tex
  • Django 密码问题

    我正在为用户使用模型 如下所示 class UserForm forms ModelForm class Meta model User fields username password email 但密码字段显示为常规文本字段 而不是密码
  • 如何使用 OpenXml 2.0 将任何文件类型嵌入到 Microsoft Word 中

    我花了很多时间试图找到一种使用 OpenXml 2 0 将任何文件嵌入 Microsoft Word 的好方法 Office 文档相当简单 但其他文件类型 例如 PDF TXT GIF JPG HTML 等 又如何呢 在 C 中 让它适用于
  • 如何使用 Bouncy Castle 将私钥附加到证书

    我有两个 PEM 文件需要在 Bouncy Castle 中加载 一个文件是证书 另一个文件是私钥 使用本文答案中的代码 如何读取 Pem 证书和私钥文件并创建 Bouncy Castle X509Certificate 和 Bouncy
  • Python 中的重试函数 [重复]

    这个问题在这里已经有答案了 前段时间 我需要一个retryR 中的函数处理缓慢的服务器响应 该函数将具有以下行为 尝试一个操作 函数或方法 如果失败 请稍等一下 然后重试 x10 我想出了以下几点 retry lt function fun
  • Ant + 类路径问题

    我已经编写了一个 ANT 脚本 最后正在构建 jar 这是 jar 部分的建筑