2012-10-26 43 views
0

我有一個客戶端,服務器和客戶端+服務器構建文件。在這裏,他們是:
Client
Server
Client+Server使用Ant構建後更改類路徑

編輯:只是爲了讓它完全清楚,我有一個問題,現在唯一的文件是Server。我只包括其他人,以顯示他們如何鏈接,但他們沒有必要看。

我遇到的問題是與服務器。我將所有庫與服務器耳朵捆綁在一起,但是在創建類路徑時,庫的相對位置是../。我需要這是../../。如果我在構建路徑時將路徑轉換爲../../,那麼它無法找到這些庫,因爲它只在構建之後纔在該位置​​。

我可以以某種方式讓這個ant構建一旦製作jar就改變classpath嗎? (我意識到這是不可能的)

或者有沒有更好的方法來處理這種情況之前,這樣我就可以得到類路徑正確?

根據要求,這裏是我關心的部分。具體來說就是server.packageserver.app_package的目標。圖書館被捆綁在耳邊。所以爲了得到它們,類路徑需要是../../

<project name="GPServer" default="dist" basedir="."> 
    <description> 

    </description> 
    <!-- set global properties for this build --> 
    <dirname property="server.basedir" file="${ant.file.GPServer}"/> 
    <property name="server.src" location="${server.basedir}/src"/> 
    <property name="server.build" location="${server.basedir}/build"/> 
    <property name="server.dist" location="${server.basedir}/dist"/> 
    <property name="server.lib" location="${server.basedir}/lib"/> 
    <property name="deploy.location" location="${server.basedir}/../../jboss-as-7.1.1.Final/standalone/deployments"/> 
    <property name="jboss.lib" location="${server.basedir}/../../jboss-as-7.1.1.Final/standalone/lib"/> 

    <path id="server.class.path"> 
     <!-- <fileset dir="${server.basedir}/lib"> 
      <include name="*.jar"/> 
     </fileset> --> 
     <fileset dir="${server.lib}"> 
      <include name="*.jar"/> 
     </fileset> 
     <fileset dir="${server.basedir}"> 
      <include name="*.properties"/> 
     </fileset> 
    </path> 

    <pathconvert property="server.modified.class.path" refid="server.class.path"> 
     <globmapper from="../*" to="../../*" /> 
    </pathconvert> 

    <path id="final.server.classpath"> 
     <pathelement path="${server.modified.class.path}"/> 
    </path> 


    <target name="server.init"> 
    <!-- Create the time stamp --> 
    <tstamp/> 
    <!-- Create the build directory structure used by compile --> 
    <mkdir dir="${server.build}"/> 
    <mkdir dir="${server.dist}"/> 
    </target> 

    <target name="server.compile" depends="server.init" description="compile the source " > 
    <!-- Compile the java code from ${src} into ${dist} --> 
    <javac srcdir="${server.src}" destdir="${server.dist}" > 
     <classpath> 
      <path refid="final.server.classpath"/> 
     </classpath> 
    </javac> 
    </target> 

    <target name="server.package" depends="server.compile" description="create the jar" > 
     <manifestclasspath property="manifest.path" jarfile="${server.dist}/GrahamsProjServer.jar"> 
      <classpath refid="final.server.classpath"/> 
     </manifestclasspath> 
     <jar destfile="${server.dist}/GrahamsProjServer.jar" basedir="${server.dist}" excludes="*.jar"> 
      <manifest> 
       <attribute name="Class-Path" value="${manifest.path}"/> 
      </manifest> 
     </jar> 
    </target> 

    <target name="server.app_package" depends="server.package" description="create the jar" > 
    <ear destfile="${server.dist}/GrahamsProjServer.ear" appxml="${server.basedir}/META-INF/application.xml" > 
     <metainf dir="${server.basedir}/META-INF"/> 
     <fileset dir="${server.dist}" includes="*.jar"/> 
     <fileset dir="${server.basedir}" includes="lib/*.jar" /> 
    </ear> 
    </target> 

    <target name="server.deploy" depends="server.package" description="generate the distribution" > 
    <!-- Create the distribution directory --> 
    <ear destfile="${deploy.location}/GrahamsProjServer.ear" appxml="${server.basedir}/META-INF/application.xml" > 
     <metainf dir="${server.basedir}/META-INF"/> 
     <fileset dir="${server.dist}" includes="*.jar"/> 
     <fileset dir="${server.basedir}" includes="lib/*.jar" /> 
    </ear> 
    </target> 



    <target name="server.clean" 
     description="clean up" > 
    <!-- Delete the ${build} and ${dist} directory trees --> 
    <delete dir="${server.build}"/> 
    <delete dir="${server.dist}"/> 
    <echo message="Deleting files in ${deploy.location}"/> 
    <delete> 
     <fileset dir="${deploy.location}" excludes="*.txt"/> 
    </delete> 
    </target> 

</project> 
+0

你打電話給哪個目標? –

+0

請包括您關心的代碼片段。在幾個月內,鏈接將變成404。 –

回答

0

你的問題是,你在client+server導入你的下標。

<!-- ============================================= --> 
<!--  Import Server/Client Build Files  --> 
<!-- ============================================= --> 
<import file="${basedir}/../GrahamsProjClient/build-client.xml"/> 
<import file="${basedir}/../GrahamsProjServer/build-server.xml"/> 

你不應該那樣做。如果你想在一個獨立的編譯文件來執行目標,使用<ant>任務是 - >http://ant.apache.org/manual/Tasks/ant.html

+0

問題發生在'server' ant文件中。不是'client + server' ant文件。對不起,我應該更清楚一點。實際上,我甚至沒有理由甚至包括'client'和'client + server'的ant文件。 – Graham

0

我忘了提,我使用的Java Webstart的。我不必在清單中擁有圖書館。他們只需要在webstart的jnlp文件中。