2016-03-23 2 views
0

Es ist mein erstes Mal, dass ich hier schreibe, also hoffe ich, dass ich alles richtig mache.Wie man abhängiges Projekt und das Aufteilen des Glases in zwei Gläser miteinschließt?

Ich habe eine Java-Anwendung, nennen wir es A. Diese Anwendung hängt von einem anderen Projekt B (benötigtes Projekt auf dem Build-Pfad). Die Projektstruktur sieht wie folgt aus:

CommonFolder/Projekt B

-- src 

-- lib 

build.xml 

CommonFolder/Unterordner/Projekt A

-- src 

-- lib 

-- config 

build.xml 

Die build.xml im Projekt B funktioniert gut und erstellen Sie eine JAR-Datei in ein entfernter Ordner Jetzt in Project A sollte die Datei build.xml zuerst build.xml von Project B aufrufen und dann die jar-Datei erstellen. Irgendwie funktioniert das nicht. Wenn ich nur die JAR-Datei von Projekt B in den lib-Ordner von Projekt A kopiere, funktioniert es, aber ich möchte das nicht manuell machen.

Mein zweites Problem ist, dass die endgültige JAR-Datei von Projekt A ziemlich groß sein wird, da sich im lib-Ordner viele Bibliotheken befinden. Ich möchte die JAR-Datei in zwei Dateien aufteilen: libraries.jar (enthält auch die Abhängigkeit von Projekt B) und application.jar. Wenn application.jar gestartet wird, sollte es libraries.jar verwenden (beide Dateien im selben Ordner). Der Vorteil ist, dass ich nur application.jar hochladen muss, was viel kleiner ist (wenn ich die Bibliotheken nicht ändere).

Wie kann das gemacht werden?

Ich freue mich auf die Antwort.

Hier sind beide build.xml Dateien.

ProjectB

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<project default="complete build" name="Create runnable jar file"> 
    <property name="src.dir" location="src" /> 
    <property name="lib.dir" location="lib" /> 
    <property name="build.dir" location="bin" /> 
    <property name="dist.dir" location="dist" /> 
    <property name="build.sysclasspath" value="last" /> 

    <path id="project-classpath"> 
     <fileset dir="${lib.dir}" includes="*.jar" /> 
    </path> 

    <target name="remove release"> 
     <delete dir="${dist.dir}" /> 
    </target> 

    <target name="clean build"> 
     <delete dir="${build.dir}" /> 
    </target> 

    <target name="compile" depends="clean build"> 
     <mkdir dir="${build.dir}" /> 
     <javac srcdir="${src.dir}" destdir="${build.dir}" debug="on" target="1.8" source="1.8"> 
      <classpath refid="project-classpath" /> 
      <compilerarg value="-Xlint:none" /> 
     </javac> 
    </target> 

    <target name="build jar" depends="remove release, compile"> 
     <mkdir dir="${dist.dir}" /> 
     <jar destfile="${dist.dir}/projectA.jar"> 
      <fileset dir="${build.dir}" /> 
      <zipgroupfileset dir="lib" excludes="META-INF/**" includes="*.jar"/> 
     </jar> 
     <antcall target="clean build" /> 
    </target> 

    <target name="complete build" depends="build jar, clean build" /> 
</project> 

Projekt A







Antwort

1

Die folgende Antwort wird beschrieben, wie Apache Efeu verwenden, um Multi-Modul-Projekt zu umgehen und erstellt, die Interdependenzen haben:

Es zeigt folgendes:

  • Jedes Modul kann unabhängig usin gebaut werden g Cache-Dateien
  • Modul Build-Reihenfolge wird unter Verwendung der buildlist Aufgabe Efeu bestimmt
  • Der Efeu buildnumber Aufgabe Auto verwendet wird, um die Versionsnummern erzeugen
  • Die ANT manifestclasspath Aufgabe verwendet werden kann, um eine ausführbare JAR-Datei mit der Liste erstellen von abhängige Gläser.

Hoffnung, die

+0

Vielen Dank für den nützlichen Hinweis hilft. – machinery

Verwandte Themen