【问题标题】:How to build maven project with ant script?如何使用 ant 脚本构建 maven 项目?
【发布时间】:2016-07-04 08:01:55
【问题描述】:

我有一个基于 Ant 的遗留 Java 项目。但是一个基于 Maven 的新模块项目是正在进行的项目。问题是我想通过 ant 脚本构建 maven 项目并创建一个 .ear 文件,其中包括旧项目和新项目依赖项。或者反之亦然,我还想找到通过 pom.xml 运行 ant 脚本的方法。我尝试了两种方法,但都没有成功。

在我的 build.xml 中,我放置了这个目标。但这无济于事

<artifact:mvn pom="../../idp/pom.xml" mavenHome="C:\Program Files\Apache\maven">
        <arg value="install"/>
      </artifact:mvn>

它在 build.xml 中显示“未绑定元素“artifact:mvn”的前缀“artifact”。'

我也试试这个:

<target name="compile-mvn-init" unless="compile.classpath" xmlns:artifact="urn:maven-artifact-ant">    
            <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant"
                classpath="lib/maven-ant-tasks-2.1.3.jar"/> 
            <condition property="maven.repo.local" value="${maven.repo.local}" else="${user.home}/.m2/repository">
                <isset property="maven.repo.local"/>
            </condition>           
            <echo>maven.repo.local=${maven.repo.local}</echo>
            <artifact:localRepository id="local.repository" path="${maven.repo.local}"/> 
            <artifact:pom file="../../idp/pom.xml" id="maven.project"/>
            <artifact:dependencies pathId="compile.classpath" filesetId="compile.fileset" useScope="compile">
                <pom refid="maven.project"/>
                <localRepository refid="local.repository"/>
            </artifact:dependencies>
            <artifact:dependencies pathId="test.classpath" filesetId="test.fileset" useScope="test">
                <pom refid="maven.project"/>
                <localRepository refid="local.repository"/>
            </artifact:dependencies>
            <artifact:dependencies pathId="runtime.classpath" filesetId="runtime.fileset" useScope="runtime">
                <pom refid="maven.project"/>
                <localRepository refid="local.repository"/>
            </artifact:dependencies>
        </target>

但它失败了:

compile-mvn-init:
  [typedef] Could not load definitions from resource org/apache/maven/artifact/a
nt/antlib.xml. It could not be found.
     [echo] maven.repo.local=C:\Users\singh.pankaj/.m2/repository
BUILD FAILED
D:\projects\ddev\SL\DEV\RL2016_03\omega\build\build.xml:702: Problem: failed to
create task or type urn:maven-artifact-ant:localRepository
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place

.

我在 build.xml 中编辑了这个部分,这个实际问题是路径。

<target name="compile-server" 
            description="Compiles Application Tier Implementation classes.">

        <javac srcdir="${SOURCE.DIR}" destdir="${BUILD.DIR}" includes="com/emergis/els/server/**/*"
               deprecation="${compile.deprecation}" debug="${compile.debug}" fork="${compile.fork}"
               failonerror="${compile.failonerror}" verbose="${compile.verbose}" classpathref="javac.classpath.id"/>

    </target>

     <target name="compile-mvn-init" unless="compile.classpath" xmlns:artifact="urn:maven-artifact-ant">    
            <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant"
                classpath="${basedir}\lib\maven-ant-tasks-2.1.3.jar"/> 
            <condition property="maven.repo.local" value="${maven.repo.local}" else="${user.home}/.m2/repository">
                <isset property="maven.repo.local"/>
            </condition>           
            <echo>maven.repo.local=${maven.repo.local}</echo>
            <artifact:localRepository id="local.repository" path="${maven.repo.local}"/> 
            <artifact:pom file="../../idp/pom.xml" id="maven.project"/>
            <artifact:dependencies pathId="compile.classpath" filesetId="compile.fileset" useScope="compile">
                <pom refid="maven.project"/>
                <localRepository refid="local.repository"/>
            </artifact:dependencies>
            <artifact:dependencies pathId="test.classpath" filesetId="test.fileset" useScope="test">
                <pom refid="maven.project"/>
                <localRepository refid="local.repository"/>
            </artifact:dependencies>
            <artifact:dependencies pathId="runtime.classpath" filesetId="runtime.fileset" useScope="runtime">
                <pom refid="maven.project"/>
                <localRepository refid="local.repository"/>
            </artifact:dependencies>
        </target> 

现在错误消失了,但我的 pom.xml 没有执行。它只是说:

compile-mvn-init:
     [echo] maven.repo.local=C:\Users\singh.pankaj/.m2/repository
[artifact:dependencies] Downloading: com/oracle/ojdbc14/10.2.0.1.0/ojdbc14-10.2.
0.1.0.pom from repository central at http://repo1.maven.org/maven2
[artifact:dependencies] Unable to locate resource in repository
[artifact:dependencies] [INFO] Unable to find resource 'com.oracle:ojdbc14:pom:1
0.2.0.1.0' in repository central (http://repo1.maven.org/maven2)
[artifact:dependencies] Downloading: com/oracle/weblogi/weblogic/10.3.5/weblogic
-10.3.5.pom from repository central at http://repo1.maven.org/maven2
[artifact:dependencies] Unable to locate resource in repository
[artifact:dependencies] [INFO] Unable to find resource 'com.oracle.weblogi:weblo
gic:pom:10.3.5' in repository central (http://repo1.maven.org/maven2)
[artifact:dependencies] Downloading: com/oracle/weblogi/wlfullclient/10.3.5/wlfu
llclient-10.3.5.pom from repository central at http://repo1.maven.org/maven2
[artifact:dependencies] Unable to locate resource in repository
[artifact:dependencies] [INFO] Unable to find resource 'com.oracle.weblogi:wlful
lclient:pom:10.3.5' in repository central (http://repo1.maven.org/maven2)

我在项目idp中基于maven的目标文件夹没有更新。

【问题讨论】:

  • 您可以使用 maven 构建 Ant 项目,但我认为您不能使用 Ant 构建 Maven 项目。 maven.apache.org/ant-tasks 但最好的方法是将 legacy 迁移到 maven。
  • Ant 有一个 exec 任务,它可以在命令行上执行任何东西。这样就可以了。或者你可以使用 gradle 来运行 ant 和 maven。 ant.apache.org/manual/Tasks/exec.html

标签: java maven ant


【解决方案1】:

经过长时间的研究,我找到了解决方案。在我的帮助下,我可以成功地构建我的新项目以及我的遗留项目。为此,我更改了现有的 build.xml。我再添加两个目标“compile-mvn-init”和“compile-idp”。

<target name="compile"
            depends="init, with.clover, compile-auth-provider, compile-shared, compile-server, compile-client, compile-mvn-init, compile-idp"
            description="Compiles Java code."/>


<target name="compile-mvn-init" unless="compile.classpath" xmlns:artifact="urn:maven-artifact-ant" >    
            <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant"
                classpath="${basedir}\lib\maven-ant-tasks-2.1.3.jar"/> 
            <condition property="maven.repo.local" value="${maven.repo.local}" else="${basedir}/idp_lib">
                <isset property="maven.repo.local"/>
            </condition>  
         <echo>maven.repo.local=${maven.repo.local}</echo>
            <artifact:localRepository id="local.repository" path="${maven.repo.local}"/> 
            <artifact:pom file="../../idp/pom.xml" id="maven.project"/>
            <property name="VERSION" value="${maven.project.version}"/>
            <echo>The version is ${maven.project.version}</echo>
            <property name="ARTIFACT_ID" value="${maven.project.artifactId}"/>
            <echo>The ARTIFACT_ID is ${ARTIFACT_ID}</echo>
            <artifact:dependencies pathId="compile.classpath" filesetId="compile.fileset" useScope="compile">
                <pom refid="maven.project"/>
                <localRepository refid="local.repository"/>
            </artifact:dependencies>
            <artifact:dependencies pathId="test.classpath" filesetId="test.fileset" useScope="test">
                <pom refid="maven.project"/>
                <localRepository refid="local.repository"/>
            </artifact:dependencies>
            <artifact:dependencies pathId="runtime.classpath" filesetId="runtime.fileset" useScope="runtime">
                <pom refid="maven.project"/>
                <localRepository refid="local.repository"/>
            </artifact:dependencies>
        </target> 

<target name="compile-idp" >

        <javac srcdir="../../idp/src" destdir="../../idp/target/idp-0.1/WEB-INF/classes" classpathref="compile.classpath"/>
        <javac srcdir="../../idp/src/main/java" destdir="../../idp/target/classes" classpathref="compile.classpath"/>

        <delete file="../../dist/idp"/>
        <mkdir dir="../../dist/idp"/>
        <mkdir dir="../../dist/idp/META-INF"/>
        <mkdir dir="../../dist/idp/WEB-INF"/>
        <mkdir dir="../../dist/idp/WEB-INF/classes"/>
        <mkdir dir="../../dist/idp/WEB-INF/lib"/>

        <copy todir="../../dist/idp/META-INF">
        <fileset dir="../../idp/src/main/webapp/META-INF"/>
        </copy>
        <copy todir="../../dist/idp/WEB-INF">
        <fileset dir="../../idp/src/main/webapp/WEB-INF"/>
        </copy>

        <javac srcdir="../../idp/src/main/java" destdir="../../dist/idp/WEB-INF/classes" classpathref="compile.classpath"/>
        <copy todir="../../dist/idp/WEB-INF/lib" flatten="true">
        <fileset refid="runtime.fileset"/> 
        </copy>
        <delete file="${app.deploy_dir}/config/${app.domainname}/applications/els.ear_dir/${ARTIFACT_ID}-${VERSION}.war"/>
        <zip destfile="${app.deploy_dir}/config/${app.domainname}/applications/els.ear_dir/${ARTIFACT_ID}-${VERSION}.war" basedir="../../dist/idp"/>
        </target> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2020-02-11
    • 1970-01-01
    相关资源
    最近更新 更多