Ant 脚本:防止 javac-classpath war-lib 中的 JAR 重复

2023-11-24

我有一个 ANT 脚本,并且有很多相同的 JAR 文件集的重复路径。 但是类路径和战争元素中有很多双重措辞。

<path id="my.classpath">
  <pathelement location="folderA/subFolderA/1.0/A.jar"/>
  <pathelement location="folderC/subFolderB/1.0/B.jar"/>
  <pathelement location="folderF/subFolderZ/2.0/Z.jar"/>
  <pathelement location="compile/subFolderX/1.0/onlyForJavac.jar"/>
</path>
....
<javac ...>
 <classpath refid="my.classpath" />
</javac>
....
<war ...>
 <lib file="folderA/subFolderA/1.0/A.jar"/>
 <lib file="folderC/subFolderB/1.0/B.jar"/>
 <lib file="folderF/subFolderZ/2.0/Z.jar"/>
 <lib file="moreFolderF/subFolderZ/2.0/additionFile.jar"/>
 <lib file="moreFolderF/subFolderZ/2.0/additionRuntimeFile.jar"/>
</war>

我想将它们总结为一个列表,这样更容易保持更新。

但我被阻止了,因为我不知道如何与类似文件集的结构共享类似路径的结构。


从 Ant 1.8.0 开始,出现了一个新的资源集合 -mappedresources那 可以用来代替war task lib元素。

因此,任务可能如下所示(几乎直接来自文档):

<war ... >
    <mappedresources>
        <restrict>
           <path refid="my.classpath"/>
           <type type="file"/>
        </restrict>
        <chainedmapper>
          <flattenmapper/>
          <globmapper from="*" to="WEB-INF/lib/*"/>
        </chainedmapper>
    </mappedresources>
</war>

添加此功能是为了解决长期存在的功能请求使 任务在部署到时压平 jarWEB-INF/lib.

以前的回答:

虽然您无法使用 vanilla Ant 轻松地将路径转换为文件集,但您可以采用其他方法。 因此,一种选择是在文件集中定义 jar,并从中导出路径。 也许是这样的:

<fileset id="my.fileset" dir="${basedir}">
    <include name="folderA/subFolderA/1.0/A.jar"/>
    <include name="folderC/subFolderB/1.0/B.jar"/>
    <include name="folderF/subFolderZ/2.0/Z.jar"/>
    <include name="moreFolderF/subFolderZ/2.0/additionFile.jar"/>
    <include name="moreFolderF/subFolderZ/2.0/additionRuntimeFile.jar"/>
</fileset>

<path id="my.classpath">
    <fileset refid="my.fileset" />
</path>

<!-- javac stays the same -->

<war ...>
    <lib refid="my.fileset" />
</war>

另一种可能性是使用蚂蚁贡献 pathtofileset task.

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

Ant 脚本:防止 javac-classpath war-lib 中的 JAR 重复 的相关文章

随机推荐

  • 独立于语言的 JSP 自定义模式的 JSTL formatNumber

    我正在使用 JSP 开发一个小应用程序 我需要将欧洲应用程序转换为国际应用程序 与美国格式兼容 等 我已经为标签创建了模式选项formatNumber here但这始终取决于您的应用程序的区域设置 示例1 我有一个区域设置en US格式编号
  • Android:为什么我们需要使用 R2 而不是 R 和 butterknife?

    我一直在使用牛油刀几个月来 我刚刚在其文档中注意到它说 现在确保在所有黄油刀中使用 R2 而不是 R 注释 这是为什么 我一直在使用 R 一切都很完美 仅在构建 Android 库项目时才需要使用 R2 https github com J
  • 稳健地裁剪照片上的旋转边界框

    我正在尝试稳健地提取轮廓的旋转边界框 我想拍摄一张图像 找到最大的轮廓 获取其旋转的边界框 旋转图像以使边界框垂直 然后裁剪到大小 为了进行演示 下面是链接在以下代码中的原始图像 我想最终将那只鞋子旋转到垂直并裁剪到尺寸 以下代码来自这个答
  • 使用 Intent.ACTION_PICK 打开图像

    我正在尝试使用intent ACTION PICK 打开图像 但是当我使用startActivityForResoult 启动活动时 我的应用程序崩溃了 有什么线索表明我做错了什么吗 public void button load imag
  • 使用 PHP 删除 .php 扩展名

    我在这里需要一些帮助 我正在使用它来修复我的 URL 但我不知道如何删除 php 扩展名 URL 现在看起来像这样 http mydomain com page php foo 123 bar 456 function decode URL
  • Javascript 在视口外的点获取元素

    是否有类似于 document elementFromPoint x y 的东西适用于视口之外的元素 根据 document elementFromPoint 的 MDN 文档 https developer mozilla org en
  • 无需本地服务器安装的 SharePoint 2010 开发

    我想在不安装本地 SharePoint 的情况下开发 SharePoint 2010 Web 部件 我的意思是我不想安装 SharePoint 服务器 因为我不需要它而且它太大了 我发现了一些关于此的问题 但我仍然无法让它工作 我找到了一篇
  • 如何通过 cloudformation 或 sam 使用 api 网关阶段?

    我在用AWS SAM部署我的 lambda 和 api 网关 下面是我的模板 yaml 文件 AWSTemplateFormatVersion 2010 09 09 Transform AWS Serverless 2016 10 31 D
  • Slim 4 中的路由中间件不会停止调用路由中的可调用对象

    我在 Slim4 中的授权中间件上遇到了困难 这是我的代码 app AppFactory create app gt add new Authentication app gt group providers function RouteC
  • 使用导航图范围注入视图模型:NavController 在 onCreate() 之前不可用

    我在应用程序中使用导航组件 并在同一图中的多个片段之间使用共享 ViewModel 现在我想用这个图形范围实例化 ViewModelthis 如你所知 在碎片中我们应该注入对象 ViewModel etc onAttach 但是当我想这样做
  • 解析器错误恢复可以由语法自动引导吗?

    我正在编写一个 LALR 解析器生成器作为一个宠物项目 我使用紫龙书来帮助我进行设计 我从中了解到解析器中有四种错误恢复方法 恐慌模式 开始转储输入符号 直到找到编译器设计者预先选择的符号 短语级恢复 将输入字符串修改为允许当前产生减少的内
  • C# Picturebox透明背景似乎不起作用

    对于我的一个项目 我需要以透明背景显示图像 我制作了一些具有透明背景的 png 图像 为了检查这一点 我在 Photoshop 中打开了它们 现在我有一个扩展 PictureBox 的类 class Foo PictureBox publi
  • Pygame显示位置

    创建 pygame 窗口后我需要窗口位置 window pygame display set mode width height 0 32 pygame init 默认情况下 窗口从 0 0 开始 但如果用户更改窗口位置 我还需要 x y
  • 将多个水平 RecyclerView 一起滚动

    我正在创建一个类似于 EPG 的视图 其中我有多个水平视图RecyclerViews 如电视节目 封装在 LinearLayout 内 当我滚动 RecyclerView 之一时 我希望其余视图一起滚动 Override public vo
  • Java MongoDB 一次保存多个文档

    我有一个更新的对象 文档列表 我需要立即保存列表中的所有对象 我在 MongoTemplate 中看到 save 但它一次只能保存一个文档 有什么方法可以一次保存多个文档 或者我需要循环调用保存 您可以使用insertAll of Mong
  • 使用 URL 从 Firebase 存储中删除文件

    我正在尝试使用文件 URL 从 Firebase 存储中删除文件 我的问题是 getReferenceFromUrl 无法解决 示例代码在这里 StorageReference mStorageRef String storageurl h
  • Windows 下 MySQL 的自动补全

    有谁知道是否有办法让自动补全在 Windows 下的 MySQL 命令行客户端中工作 对我来说 它在 Linux 下工作得很好 但在 Windows 下只需移动光标即可 它应该这样工作 C gt mysql auto rehash 或者配置
  • 测试 3D 点是否位于 3D 多面体内部

    给定一个由三角网格表示的边界定义的 3D 多面体 如何实现一种算法来确定给定的 3D 点是否属于多面体的内部 有多种方法可以实现此功能 最简单的方法是创建一条从该点开始并指向任意方向的无限射线 或很长的线段 然后计算射线与三角形之间的交点数
  • Python:通过实例对象调用方法:“缺少 1 个必需的位置参数:'self'”[重复]

    这个问题在这里已经有答案了 我是Python新手 我编写了两个类 第二个类具有第一个类的实例作为成员变量 现在我想通过类 1 中的实例调用类 2 的方法 我找不到答案 像这样的东西 class Class1 def uselessmetho
  • Ant 脚本:防止 javac-classpath war-lib 中的 JAR 重复

    我有一个 ANT 脚本 并且有很多相同的 JAR 文件集的重复路径 但是类路径和战争元素中有很多双重措辞