Maven Antrun和Dependencies

Aar*_* H. 9 ant dependencies maven-2 maven-antrun-plugin

(见下面的编辑.)

我不能只使用类路径的原因是因为我需要管理一些非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}"/> 
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以告诉我,对于一些常见的依赖,refid应该什么样的?

编辑:

感谢您的回复.

使用您的示例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>
Run Code Online (Sandbox Code Playgroud)

这是我在运行mvn compile时得到的:

[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] ------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

编辑(2):

看看链接的源代码,我决定运行"mvn -X compile"和grep for"Storing",这会产生一堆日志输出,存储起来.

令人感兴趣的是,我明确指定的依赖并不在列表中显示的事实,并且,当我切换到基于我的一个条目的关键看,我仍然得到错误.

Aar*_* H. 9

基于SingleShot链接到的代码,并随机戳到它工作,这是我如何让这个问题"工作",(我在引号中说,因为它感觉非常脆弱.)

以下是使其正常工作的方法:

<property name="log4j_location" 
                value="${maven.dependency.log4j.log4j.jar.path}"/>
<echo message="${log4j_location}"/>
Run Code Online (Sandbox Code Playgroud)

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

似乎依赖项必须位于顶级依赖项列表中,使得log4j成为antrun插件的依赖项,无论如何我都不会将它暴露给插件.

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

肥皂盒:

我强烈推荐任何人认为Maven使用Ant与maven插件,或者更好的是,使用Ant与Ivy代替.

这个特殊的问题是与maven做出任何超出规范的完全荒谬难度的一个光辉的例子.

我说这已经实现了基于Maven2的整个构建系统,并且还在Ant中实现了几个构建系统.我已经将Maven2和Ant用于涉及Java,Flex/AS3,C#和C++的复杂构建.Maven对于没有外部依赖于其他语言项目的Java项目是有意义的.

Maven确实解决了Ant无法解决的一些问题,但是通过一些预先规划,Ant更灵活,文档更好,而且工具越少.

如果您决定采用蚂蚁路线,请确保为您的项目定义结构,找出您的依赖系统(使用一个).

我认为你最终会比使用Maven更快乐,因为你不会花时间来尝试修复你的构建系统.