【问题标题】:How to set the parent directory of the basedir in maven as the basedir of ant?如何将maven中basedir的父目录设置为ant的basedir?
【发布时间】:2013-11-06 14:28:05
【问题描述】:

背景: 我需要使用 maven 在 build.xml 文件中运行一个 ant 任务。所以我使用 maven-antrun-plugin 来做到这一点。

问题:
当我在 ant 中读取 basedir 时(在运行 pom 之后),它显示为 fldr1.fldr2.prjctNm 这是它的默认值(在两个回声中)。但是,我想为其设置父目录路径。 (例如:fldr1.fldr2)。我该怎么做。

Ant 文件单独执行此操作,因为它在标签中定义了 basedir="../。

pom.xml(位置:fldr1.fldr2.prjctNm)

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

            <executions>
                <execution>
                    <id>default-cli</id>
                    <phase>package</phase>

                    <configuration>
                        <target>
                            <property name="basedir" value="../" />
                            <echo message="basedir path 1 : ${basedir}"/>
                            <ant antfile="build.xml" target="cleanAll" />
                        </target>
                    </configuration>

                    <goals>
                        <goal>run</goal>
                    </goals>

                </execution>
            </executions>

        </plugin>
    </plugins>
</build>

build.xml(位置:fldr1.fldr2.prjctNm)

<project name="RideUtilities" default="cleanAll" basedir="../">

    <target name="cleanAll" depends="all"></target>

    <target name="all" depends="init,build"></target>

    <target name="init">

        <echo message="basedir path 2 : ${basedir}"/>

        <property name="dirs.base" value="${basedir}/RideUtilities" />
        <property name="src" value="${dirs.base}\src" />
        <property name="jarFile" value="RideUtilities.jar" />
    </target>

    <target name="build">
        <echo> ---Building jar files using ${dirs.base} ---- </echo>
    </target>

</project>

【问题讨论】:

    标签: java eclipse maven ant


    【解决方案1】:

    我不确定您究竟需要什么,但我能够通过 basedir 获得您想要的行为,如下所示:

    pom.xml

    <target>
       <echo message="basedir path 1 : ${basedir}" />
       <ant antfile="build.xml" target="echo-base-dir" inheritAll="false" />
    </target>
    

    build.xml

    <project name="test" basedir="..">
        <target name="echo-base-dir">
            <echo>base dir=${basedir}</echo>
        </target>
    </project>
    

    输出是:

    C:\dev\JavaTests>mvn antrun:run [INFO] Scanning for projects... 
    [INFO]
    [INFO]
    [INFO] Building test Strategy 3.0.7-SNAPSHOT 
    [INFO]
    [INFO] 
    [INFO] --- maven-antrun-plugin:1.7:run (default-cli) @ test-test ---
    [INFO] Executing tasks
    
    main:
         [echo] basedir path 1 : C:\dev\JavaTests
    
    echo-base-dir:
         [echo] base dir=C:\dev
    
    [INFO] Executed tasks
    [INFO]  
    [INFO] BUILD SUCCESS
    [INFO]
    
    [INFO] Total time: 1.005s 
    [INFO] Finished at: Wed Nov 06 09:59:36 EST 2013 
    [INFO] Final Memory: 8M/182M 
    
    C:\dev\JavaTests>
    

    关键显然是 inheritAll=false。但也许这会打乱您引用某些 Maven 属性的需要。

    【讨论】:

    • 谢谢山姆。它对我有用。但是现在我遇到了以下错误:无法找到 javac 编译器; [错误] com.sun.tools.javac.Main 不在类路径中。 [错误] 也许 JAVA_HOME 不指向 JDK。 [错误] 当前设置为“/rezsystem/java/jdk1.6.0_21/jre”。现在我正在努力。检查了.bashrc。但它是正确的。
    • @NamalFernando: JAVA_HOME=/rezsystem/java/jdk1.6.0_21,您指向的目录太低一级。我认为这将解决您的问题。 tools.jar 位于 /rezsystem/java/jdk1.6.0_21/lib 文件夹中。 (约定是 JAVA_HOME 始终指向 Java 安装的根目录。)
    • @NamalFernando:你为什么不使用 Maven 编译?
    • 作为我们公司的标准(用于版本控制等),我们已将所有项目转换为 Maven。但我也需要在 ANT 上构建其中一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2011-08-29
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    相关资源
    最近更新 更多