Maven Antrun 和依赖项

2023-11-22

(请参阅下面的编辑。)

我不能只使用类路径的原因是因为我需要管理一些非java库,并且我正在编译一个非java项目。

我正在尝试在 antrun 调用中使用 Maven 依赖项,遵循 Maven 站点上的文档:

http://maven.apache.org/plugins/maven-antrun-plugin/examples/classpaths.html

在页面底部:

<property name="mvn.dependency.jar" 
      refid="maven.dependency.my.group.id:my.artifact.id:classifier:jar.path"/>
<echo message="My Dependency JAR-Path: ${mvn.dependency.jar}"/> 

无论我如何尝试,我都无法完成这项工作。我已经尝试过 ${} 围绕 refid 内容,我已经尝试过使用冒号、句号等作为分隔符,以我能想到的各种方式。

谁能告诉我 refid 应该做什么really看起来像一些常见的依赖项?

EDIT:

感谢您的回复。

使用您的示例 SingleShot,我有以下内容:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
      <execution>
        <id>create-messages</id>
        <phase>compile</phase>
        <configuration>
          <tasks>
            <property name="build.compiler" value="extJavac"/>
            <property name="compile_classpath" refid="maven.compile.classpath"/>
            <property name="runtime_classpath" refid="maven.runtime.classpath"/>
            <property name="test_classpath" refid="maven.test.classpath"/>
            <property name="plugin_classpath" refid="maven.plugin.classpath"/>

            <property name="log4j.jar" refid="log4j:log4j:jar"/>
            <echo message="Where is the Log4J JAR?: ${log4j.jar}"/>
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
    <dependencies>
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
      </dependency>
    </dependencies>
  </plugin>

这是运行 mvncompile 时得到的结果:

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Chat Component
[INFO]    task-segment: [compile]
[INFO] ------------------------------------------------------------------------
Downloading: http://<redacted>/content/groups/public/log4j/log4j/1.2.14/log4j-1.2.14.pom
2K downloaded
Downloading: http://<redacted>/content/groups/public/log4j/log4j/1.2.14/log4j-1.2.14.jar
358K downloaded
[INFO] [antrun:run {execution: create-messages}]
[INFO] Executing tasks
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error executing ant tasks

Embedded error: Reference log4j:log4j:jar not found.
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Fri Oct 16 14:54:19 PDT 2009
[INFO] Final Memory: 7M/80M
[INFO] ------------------------------------------------------------------------

编辑(2):

查看链接的源代码,我决定运行“mvn -X编译”和grep“存储”,这会显示一堆存储内容的日志输出。

有趣的是,我明确指定的依赖项没有显示在列表中,并且当我切换到基于其中一个条目的键时,我do看,我仍然收到错误。


基于 SingleShot 链接到的代码,并随机戳它直到它起作用,这就是我如何让这个问题“起作用”(我用引号引起来,因为它感觉非常脆弱。)

这是使其正常工作的方法:

<property name="log4j_location" 
                value="${maven.dependency.log4j.log4j.jar.path}"/>
<echo message="${log4j_location}"/>

需要注意的一些重要事项:cannot在设置 ant 属性时使用 Maven 依赖项作为 refid。您必须使用 ${} 来获取 maven var 值。

看来依赖项必须位于顶级依赖项列表中,使 log4j 成为 antrun 插件的依赖项不会以我所看到的任何方式将其暴露给插件。

所有路径分隔符都是点 (.),没有冒号 (:)这就是为什么我最终检查自己的答案是否正确。

Soapbox:

我强烈建议任何考虑 Maven 的人使用 Ant 和 Maven 插件,或者更好的是,使用 Ant 和 Ivy。

这个特殊的问题是一个光辉的例子,说明了使用 Maven 做任何不符合规范的事情所面临的难度是极其荒谬的。

我这样说是基于 Maven2 实现了整个构建系统,并且还在 Ant 中实现了多个构建系统。我使用过 Maven2 和 Ant 来进行涉及 Java、Flex/AS3、C# 和 C++ 的复杂构建。 Maven 的意义在于Java项目有no对其他语言项目的外部依赖。

Maven 确实解决了 Ant 未隐式解决的一些问题,但通过一些预先规划,Ant 是更灵活、文档更完善且错误更少的工具。

如果您决定走 ant 路线,请确保为您的项目定义一个结构,找出您的依赖系统(Use one).

我认为您最终会比使用 Maven 更快乐,因为您不会花费关键时间来尝试修复构建系统。

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

Maven Antrun 和依赖项 的相关文章

  • 如何管理 OSGi 构建依赖项?

    我们已将 OSGi 运行时 Equinox 嵌入到自定义客户端 服务器应用程序中 以促进插件开发 到目前为止一切进展顺利 由于 Eclipse 内置的清单编辑器 依赖项管理和导出向导 我们一直使用 Eclipse 来构建插件 使用 Ecli
  • 如何在maven中使用不同的JAR进行编译和测试?

    我根据 javaee api 编译我的程序 但对于 Junit 测试 我必须使用 glassfish javaee jar 等特定实现来避免类似错误java lang ClassFormatError 类文件 javax persisten
  • 两个对象相互依赖。那不好吗?

    当我为我的项目构建自己的系统时 我学到了很多关于设计模式的知识 我想问你一个我找不到答案的设计问题 目前我正在使用套接字构建一个带有多个客户端的小型聊天服务器 现在我有三门课 人级其中包含昵称 年龄和房间对象等信息 房间级它保存诸如房间名称
  • Maven2继承

    如果我有一个父 pom 并且想将其继承到多个项目 我通常通过添加到项目顶部来做到这一点
  • 运行 java -jar 时出现 java.lang.ClassNotFoundException

    我正在使用 ant 来构建我的build xml文件 它编译正常 但随后得到运行时java lang NoClassDefFoundError通过 运行生成的 jar 时java jar my jar jar 似乎这个问题出现了很多 但没有
  • 范围为“provided”的工件的 Maven 依赖关系树行为

    我偶然发现同一项目在两台电脑上的不同行为 在两台机器上我运行命令mvn dependency tree X但收到不同的结果 在我收到的第一台机器上 Apache Maven 3 2 2 45f7c06d68e745d05611f7fd14e
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 如何在 Maven 中显示消息

    如何在 Maven 中显示消息 在ant中 我们确实有 echo 来显示消息 但是在maven中 我该怎么做呢 您可以使用 antrun 插件
  • 如果使用的 JVM 是 x86 或 x64,则以不同的方式解决 Maven 依赖关系?

    我设置了一个 Maven 存储库来托管一些 dll 但我需要我的 Maven 项目根据使用的 JVM 是 x86 还是 x64 下载不同的 dll 例如 在运行 x86 版本 JVM 的计算机上 我需要从存储库下载 ABC dll 作为依赖
  • 如何在 Eclipse .classpath 文件中使用环境变量?

    在 Windows 中 我有一个环境变量 EXTERNAL LIB ROOT 指向 C Program Files MyExternalLibRoot 在另一台计算机上 它可能指向 C ExternalLibs 在 ant build xm
  • Findbug - ANT xslt 样式表源代码参考

    我有一个 ANT 目标 它在同一源代码上运行 findbugs 两次以生成 xml 和 html 报告
  • 使用 Maven 外部化 SCM 凭证

    有没有一种方法可以外部化我的 SCM 凭据 以便它们不会存储在项目的 POM 中 问题是 如果它们包含在项目的 POM 中 那么在部署项目时它们将对所有人可见 对于某些 SCM 提供商 您可以在
  • 如何检查属性是否存在?

    如何使用 Ant 检查属性是否存在 我愿意使用ant contrib 如果 Ant 没有提供类似的东西 Also ant contrib有一个断言任务 它提供exists 但断言不是我需要的 因为我更喜欢布尔返回值 您可以使用健康 状况 h
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Maven 调试输出:(f) 是什么意思?

    当您使用 X 标志运行 Maven 2 并观察它配置插件时 您可能会看到如下输出 DEBUG Configuring mojo org apache maven plugins maven clean plugin 2 3 clean gt
  • 具有本机依赖项和复制文件的 Maven 项目

    我有以下场景 mylib 是一个库 我有其源代码 因此我想将它们放入 Maven 项目 mylib mylib 中 这个库有一个 jar 依赖项 我只有 jar 并且在 Maven 存储库中找不到它 而且我也不想在那里安装它 为了使其编译
  • 在maven项目之间共享测试资源

    有一个明确的解决方案可以使用以下命令在 Maven 项目之间共享公共测试代码test jar的目标maven jar plugin插件 参见here https stackoverflow com questions 174560 shar
  • 标记处的其他选项

  • Netbeans 和 Maven:不同的编译行为

    我正在使用 Netbeans 和 Maven 项目 在某些情况下 Netbeans 显示编译失败 红色气球 但 Maven 编译所有内容都没有任何问题 造成这种差异的原因可能是什么 我已经检查过两者都使用相同的 JDK 版本 一个可能的原因
  • 自动创建文件“requirements.txt”

    有时我从以下网站下载Python源代码GitHub https en wikipedia org wiki GitHub并且不知道如何安装所有依赖项 如果没有的话要求 txt文件我必须手动创建它 给定Python源代码目录 是否可以创建要求

随机推荐

  • 将文件从 Jenkins 工作区提交到 SVN

    我在 Subversion 存储库中有一个保存的项目 并使用 Jenkins 对其进行编译 当我运行构建时 Jenkins 将项目拉入工作区目录 我需要将一个已更改的文件从 Jenkins 工作区提交到 Subversion 我该怎么做 谢
  • 如何使用Java从Sqlite3数据库中获取解析后的数据?

    我通过使用 POJO 为我的方法创建模型 从 sqlite3 DB 获取数据 在数组列表中检索数据时 我收到日期解析错误 日期在 sqlite3 DB 中定义为时间戳 在编译时会抛出 无法解析的日期 2015 05 21 12 41 56
  • Xcode 命令行工具 - 如何在终端中运行?

    当您在 Xcode 中创建命令行工具项目时 您会在 main m 中看到以下内容 import
  • 我们如何在 Fabric 1.0 中从另一个链码调用一个链码?如果有人有例子请分享

    我想从 Fabric 1 0 中的另一个链代码调用一个链代码 所以我有一些问题 1 我们可以在单个对等点上安装两个链码吗 2 如果我们在不同的对等点上安装两个链代码 我们如何调用另一个链代码 3 如果有人有示例 请分享 这应该很容易实现 下
  • Python 中的 sqlite3

    如何检查数据库文件是否已经存在 而且 如果它存在 我如何检查它是否已经有一个特定的表 要查看数据库是否存在 您可以sqlite3 connect到您认为包含数据库的文件 并尝试对其运行查询 如果是not数据库 你会得到这个错误 gt gt
  • 对并发软件进行单元测试 - 你做什么?

    随着软件变得越来越并发 您如何处理测试类型的核心行为与您的单元测试 不是并行行为 只是核心行为 在过去的美好时光 你有一个类型 你可以调用它 然后检查它返回的内容和 或它调用的其他内容 如今 您调用一个方法 实际工作就会安排在下一个可用线程
  • 将 CQRS 命令直接传递给域对象

    TLDR 我正在为我的一个较大的项目实现 CQRS DDD 解决方案 并且我想知道是否有任何真正的原因导致我的命令处理程序无法以较小的方式将命令对象直接分派到我的聚合在少数情况下 命令对象的数据丰富吗 我找不到任何具体原因说明为什么这是一种
  • 未初始化的对象与初始化为 NULL 的对象

    我在 Java 工作 我通常这样设置一些对象 public class Foo private SomeObject someName do stuff public void someMethod if this someName nul
  • 如何使用 Kubernetes Go 库创建一个简单的客户端应用程序?

    我正在努力使用 Kubernetes Go 库 文档 至少我找到的那些 与库本身相比似乎已经过时了 由于导入问题 所提供的示例无法构建 我只是想做一些简单的事情 按名称获取服务对象并打印一些属性 如nodePort 我只需要一个简单的库使用
  • 更新数据库源后,如何让 Visual Studio 2010 刷新我的数据集?

    我已将新列添加到现有列MS Access 2010我已连接的数据库Visual Studio 2010 更新数据库后 数据源窗口和DataSet没有新列 我查看了诸如此类的答案 Visual Studio 数据集设计器刷新表 但是使用 SE
  • 如何构建发布的 vscode 版本

    这个问题是针对开源 vscode 符合 MIT 许可证 而不是 VS Code 我昨天花了很多时间试图找出如何构建某种发行版本 我的意思是 就像在 Visual Studio 中一样 我们有 调试 和 发布 构建 我是C 开发人员 vsco
  • 我想在android的日历中选择多个日期

    我想在日历中选择多个日期 多个选择工作正常 但在 toast 中仅显示单个日期 第一个日期 如果我选 择 4 天 1 8 14 到 4 8 14 所有日期都应显示在 toast 中 这是我的代码 public class SampleTim
  • 使用 UIWebview 的 IP 摄像机流适用于 IOS 5,但不适用于 IOS 6

    您好 我在我的网站上流式传输 ip 摄像机 并将我的网站嵌入到 UIWebview 上 在 IOS 5 上工作正常 但当我在 IOS 6 上打开我的应用程序时 仅显示图像而不是视频 在我的网站上我使用请有人帮助我 还有其他方法吗 如果你想在
  • 如何从 iOS 应用程序打开 VPN? (私有 API 可以)

    不幸的是 当 iOS 设备进入 睡眠模式 时 即使已配置的 VPN 也会被关闭 一位客户想要为他的 iPad 安装应用程序has使用VPN是为了安全 所以任何事情都必须通过VPN来完成 该应用程序必须进行大量同步 但 iOS 设备可能会自行
  • 为静态方法设置 AspectJ 建议

    我用原始的切入点和建议方法编写了简单的方面 Aspect public class MyAspect Pointcut execution static com mtag util SomeUtil someMethod public vo
  • 如何在 Perl、DBI 中显示查询时间?

    我使用 Perl 和 DBI 来管理我的 MySQL 表 查询等 如何显示查询的运行时间 如果我在控制台中执行 SELECT 操作 结果将如下所示 id name 1 Jack 2 Joe 3 Mary 3 rows in set 0 17
  • 设置依赖注入的过滤器属性以接受构造函数中的参数

    我正在遵循 ninject 过滤器属性设置page 对于他们来说 他们有 WithConstructorArgumentFromControllerAttribute
  • Sails.js + socket.io:从服务器向客户端发送消息

    我正在尝试使用 sails js 设置一个系统 让服务器向一组客户端广播消息 基本上 A 组中的客户端向服务器发送 AJAX 请求 服务器处理请求并通过套接字向 B 组的所有客户端发送消息 B组的客户端通过套接字接收消息并显示一些内容 根据
  • 在vbscript中调用C# dll

    我正在尝试从 QTP 调用 C dll 使用 vbscript 我尝试了很多事情但没有成功 视觉工作室2010 创建C 类库 st dll code using System using System Collections Generic
  • Maven Antrun 和依赖项

    请参阅下面的编辑 我不能只使用类路径的原因是因为我需要管理一些非java库 并且我正在编译一个非java项目 我正在尝试在 antrun 调用中使用 Maven 依赖项 遵循 Maven 站点上的文档 http maven apache o