Maven的Antrun和相关性(Maven Antrun and Dependencies)

2019-08-19 09:58发布

(参见下面的修改。)

我不能只使用类路径的原因,是因为我需要管理一些非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 真的应该像一些常见的依赖?

编辑:

感谢您的回复。

使用你的榜样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>

这里就是我得到的运行时编译MVN:

[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] ------------------------------------------------------------------------

EDIT(2):

纵观源代码链接,我决定运行“命令mvn -X编译”和grep为“存储”,这变成了哪里获得存储的东西一大堆的输出日志。

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

Answer 1:

在此基础上SingleShot挂码和随机戳,直到它的工作,这里就是我得到了这个问题,“工作”,(我用引号说,因为感觉很脆弱的。)

下面就来使其正常的工作方式:

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

一些重要的事情需要注意: 不能使用maven依赖性,在设置蚂蚁属性REFID。 你必须使用$ {}得到行家的VAR值。

看来,依赖关系必须是顶级的依赖关系列表,使得Log4j提供的antrun插件的依赖并没有把它暴露在插件,无论如何,我可以看到。

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

肥皂盒:

我会强烈建议任何考虑的Maven使用Ant与Maven插件,或者甚至更好,使用Ant常春藤代替。

这种特殊的问题是做任何事情了与Maven规范的相关困难的荒谬绝伦水平的一个光辉的榜样。

我说这个已经实现了基于Maven2的整个构建系统,并具有蚂蚁还实施了几个构建系统。 我用两个的Maven2和Ant与复杂的构建涉及Java时,Flex / AS3,C#和C ++。 Maven的是有道理的,那些对其他语言的项目没有外部依赖Java项目。

Maven的确实解决了一些事情,不被蚂蚁隐式处理,但也有一些预先规划,蚂蚁是更加灵活,更好地记录和bug更少的工具。

如果你决定去蚂蚁路线,一定要定义一个结构为您的项目,找出你所依赖的系统( 使用一个 )。

我想你会最终会比使用Maven更快乐,因为你不会花关键时刻试图解决您的构建系统。



Answer 2:

作为附录上述亚伦H.的回答,我只好插件的版本设置为1.3,为实际工作。 我用它没有一个具体的版本,并获得1.1(其中似乎没有任何工作)。


      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.3</version>
        ...
      </plugin>


Answer 3:

如果没有你键入的内容到您的POM很难说,但考虑到一个具体的例子为例。 比方说,你的POM引用的log4j(的groupId = log4j的,artifactId的log4j的=)。 我相信这是你将如何引用JAR在你的Ant文件:

<property name="log4j.jar" refid="maven.dependency.log4j:log4j:jar.path"/>
<echo message="Where is the Log4J JAR?: ${log4j.jar}"/>

理想情况下,你不应该引用特定的JAR文件,而是引用整个类路径的适当范围,作为插件有点稀疏的文档表示。

如果您仍然有问题,请张贴<dependency>依赖你正在使用一个Maven POM标签,我可以尝试更加具体。

我看了看插件的代码进行确认。



Answer 4:

这对我的作品。

<copy file="${javax.mail:javax.mail-api:jar}" todir="tomcat/lib" />
<copy file="${org.springframework:spring-instrument-tomcat:jar}" todir="tomcat/lib" />
<copy file="${postgresql:postgresql:jar}" todir="tomcat/lib"/>

http://maven.apache.org/plugins/maven-antrun-plugin/examples/classpaths.html有如何引用依赖形成蚁类路径的解释。



Answer 5:

有一个文档中的bug 。 路径应该是这样的形式:

<property name="mvn.dependency.jar" 
  value="${maven.dependency.my.group.id.my.artifact.id.classifier.jar.path}"/>

因此,对于你的log4j依赖正确的密钥将是:

maven.dependency.log4j.log4j.jar.path

另外请注意,它应该是value=而非refid= ,所以全属性是:

<property name="log4j.jar" 
      value="${maven.dependency.log4j.log4j.jar.path}"/>
<echo message="My Dependency JAR-Path: ${log4j.jar}"/> 


Answer 6:

我有一个现有的蚂蚁,我们计划使用(新)Maven来调用它。 我遇到了,我可能不记得清楚的问题,但它关系到类pathes,也许只是喜欢你。

问题是,“蚁族”,我们正在使用的日常是设定在xNix系和Windows类pathes,既是一个shell脚本。 我还没有比较了它与那些可到Maven设置类pathes,但我的测试表明,他们不匹配和蚂蚁不会与一些pathes从行家传递给它运行。

我现在用的就是“EXEC - Maven的插件”,并运行ant与应用一些参数的外部程序。 这是肯定的工作,但增加了额外的依赖,虽然。



文章来源: Maven Antrun and Dependencies