2016-07-04 21 views
0

Ich habe Legacy-Java-Projekt, das auf Ant gebaut wird. Aber ein neues Modulprojekt, das auf Maven basiert, ist ein laufendes Projekt. Problem ist, ich möchte Maven-Projekt durch Ant-Skript erstellen und erstellen Sie eine EAR-Datei, die sowohl ältere als auch neue Projektabhängigkeiten enthält. Oder umgekehrt. Ich möchte auch herausfinden, wie man ant-Skript über pom.xml ausführt. Ich habe beide Wege ausprobiert, konnte aber keinen Erfolg haben.Wie man Maven-Projekt mit Ameisenskript baut?

In meiner build.xml habe ich dieses Ziel gesetzt. Aber es wird nicht helfen

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

Es zeigt Fehler in build.xml, dass ‚das Präfix " Artefakt " für Element " Artefakt. Mvn " ist nicht gebunden‘

ich dies auch versuchen:

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

Aber es versäumt sagt, dass:

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 

.

Ich habe diesen Teil in meiner build.xml bearbeitet, um dieses tatsächlich Problem für Pfad ist.

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

Jetzt war der Fehler weg, aber meine pom.xml wird nicht ausgeführt. Es heißt einfach:

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) 

Mein Zielordner in Projekt-IDP, der auf Maven basiert, wird nicht aktualisiert.

+2

Sie können ein Ant-Projekt mit Maven erstellen, aber ich glaube nicht, dass Sie ein Maven-Projekt mit Ant aufbauen können. https://maven.apache.org/ant-tasks/ Aber der beste Weg ist, Legacy zu Maven zu migrieren. –

+1

Ant hat eine Exec-Task und das könnte Alles in der Befehlszeile ausführen. Das würde also funktionieren. Oder Sie könnten Gradle benutzen, um sowohl Ameise als auch Maven zu führen. http://ant.apache.org/manual/Tasks/exec.html –

Antwort

0

Nach langer Recherche kam ich die Lösung heraus. Und mit der Hilfe von kann ich mein neues Projekt zusammen mit meinem alten Projekt erfolgreich bauen. Dafür habe ich meine bestehende build.xml geändert. Ich füge zwei weitere Ziele "compile-mvn-init" und "compile-idp" hinzu.

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