2016-11-02 2 views
0

Ich kann keine Quelle mit Ant über Terminal kompilieren, da es scheint, dass Abhängigkeiten nicht richtig aufgelöst werden, obwohl ich 'ant resolve oder ant retrieve' ausgibt?Java - Apache Ivy löst keine Abhängigkeiten korrekt

Mein build.xml und ivy.xml unter

build.xml

<!-- ANT HOME ENVIRONMENT VARIABLE --> 
<property name="ant.home" value="${env.ANT_HOME}" /> 

<!-- IVY HOME DIRECTORY --> 
<property name="ivy.home" value="${ant.home}" /> 

<!-- IVY2 JAR DIRECTORY (REPOSITORY) --> 
<property name="ivy.default.ivy.user.dir" value="${user.home}/.ivy2"/> 

<!-- DOWNLOAD IVY --> 
<target name="setup" description="Install ivy"> 
    <mkdir dir="${user.home}/.ivy2" /> 
    <get dest="${ivy.home}/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.3.0/ivy-2.3.0.jar"/> 
</target> 

<!-- RESOLVE CLASSPATHS --> 
<target name="resolve" description="Use ivy to resolve classpaths"> 
    <ivy:resolve file="ivy.xml" /> 
    <ivy:report todir='target/ivy-reports' graph='false' xml='false'/> 
    <ivy:cachepath pathid="ivy.path" conf="compile" /> 
</target> 

<!-- RETRIEVE DEPENDANCIES AFTER RESOLVING--> 
<target name="retrieve" depends="resolve" description="Use ivy to retrieve dependencies"> 
    <ivy:retrieve sync="true" type="jar" /> 
</target> 

<!-- COMPILE PROJECT --> 
<target name="compile" depends="clean, retrieve"> 
    <!-- Create build directory --> 
    <mkdir dir="target/${ant.project.name}" /> 

    <!-- Compile source code --> 
    <javac includeantruntime="false" srcdir="src" debug="true" destdir="target/${ant.project.name}" > 
     <classpath> 
      <path refid="ivy.path" /> 
     </classpath> 
    </javac> 
</target> 

<!-- CLEAN TARGET DIRECTORY --> 
<target name="clean"> 
    <delete dir="target/orderlycalls" /> 
    <delete dir="target/classes" /> 
    <delete dir="target/ivy-reports" />  
</target> 

<!-- CLEAN TARGET AND IVY CATCHE --> 
<target name="clean-all" depends="clean" description="Additionally purge ivy cache"> 
    <ivy:cleancache/> 
</target> 

ivy.xml

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> 

    <configurations> 
     <conf name="default" visibility="public" description="The single built artifact. Nothing else"/> 
     <conf name="compile" visibility="public" description="The master module and transitive dependencies"/> 
     <conf name="provided" visibility="public" description="Needed for compile. Will be provided outside or war"/> 
     <conf name="runtime" visibility="public" description="Not required for compile, but for runtime" extends="compile"/> 
     <conf name="default" visibility="public" description="The default configuration" extends="runtime"/> 
     <conf name="test" visibility="private" description="Required for testing" extends="runtime"/> 
    </configurations> 

    <dependencies> 
     <dependency org="net.sf.trove4j" name="trove4j" rev="3.0.3" conf="provided"/> 
     <dependency org="org.apache.tomcat.embed" name="tomcat-embed-core" rev="7.0.53" conf="provided"/> 
    </dependencies> 

</ivy-module> 

wenn ich laufe 'ant Kompilierung' die auf compilation ant beschwert sich darüber, dass es keinen 'Servlet Context' finden kann, der Teil von tomcat.jar oder 'TObject', 'THashMap' ist sind Teil von trove.jar und viele mehr, trotz der Tatsache, dass ich die Gläser in build.xml abrufe/auflöse.

Eine andere Sache, die ich bemerkt habe, ist, dass in meinem .ivy2/Cache // es keine tatsächlichen JAR-Dateien gibt. Nur xml-Dateien

Irgendeine Idee, was ich falsch mache oder gar nicht mache? einen Ant-Pfad zu erstellen, unter Verwendung von Abhängigkeiten im Zusammenhang mit der „kompiliert“ Konfiguration

Dank

Antwort

1

Sie haben die CachePath Aufgabe verwendet.

<ivy:cachepath pathid="ivy.path" conf="compile" /> 

Ihr Problem liegt mit Efeu-Datei, in der Sie keine Abhängigkeiten mit einer Abbildung auf die „Übersetzen“ Konfiguration angegeben haben. Dies würde erklären, warum Ihre Java-Task keine Gläser sehen kann.

<configurations> 
     ... 
     <conf name="compile" .../> 
     <conf name="provided" .../> 
     ... 
    </configurations> 

    <dependencies> 
     <dependency ... conf="provided"/> 
     <dependency ... conf="provided"/> 
    </dependencies> 

Ich schlage vor, für jede Ihrer Konfigurationen eine explizite Zuordnung zu schaffen, zum Beispiel:

<!-- Compile dependencies --> 
<dependency org="net.sf.trove4j" name="trove4j" rev="3.0.3" conf="compile->default"/> 

<!-- provided dependencies --> 
<dependency org="org.apache.tomcat.embed" name="tomcat-embed-core" rev="7.0.53" conf="provided->master"/> 

Die einzigen Zuordnungen Sie jemals brauchen werden, um die folgenden Remote-Konfigurationen:

  • default Remote jar plus seine transitiven Abhängigkeiten
  • Master Fernglas nur

Weitere Informationen darüber, wie Efeu Module Remote Maven interpretiert lesen Sie bitte die folgenden Schritte aus:

Verwandte Themen