2012-09-10 72 views
1

我正在使用ant構建腳本創建一個jar包。問題是.class文件不包含在生成的.jar文件中。我也在製作jar時嘗試了{build.dest},但沒有任何效果。編譯的類不包含在生成的jar中

剩下的所有文件我需要在.jar文件中。

這裏是我的構建腳本

<?xml version="1.0"?> 

<project name="TaskNodeBundle" default="all" basedir="."> 
    <!-- Sets variables which can later be used. --> 
    <!-- The value of a property is accessed via ${} --> 
    <property name="bundlename" value="task-node-bundle" /> 
    <property name="src.dir" location="../src" /> 
    <property name="lib.dir" location="../lib" /> 
    <property name="build.dir" location="/buildoutput" /> 
    <property name="build.dest" location="../build/dest" /> 


    <!-- 
     Create a classpath container which can be later used in the ant task 
    --> 
    <path id="classpath"> 
     <fileset dir="${lib.dir}/"> 
      <include name="*.jar" /> 
     </fileset> 
    </path> 

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

    <!-- Deletes the existing build directory --> 
    <target name="mkdir" depends="clean"> 
     <mkdir dir="${build.dest}"/> 
    </target> 


    <!-- Compiles the java code --> 
    <target name="compile" depends="mkdir"> 
     <javac srcdir="${src.dir}" destdir="${build.dest}" classpathref="classpath" /> 
    </target> 

    <target name="package-bundle" depends="compile" description="Generates the bundle" > 
     <jar destfile="${build.dest}/${bundlename}.jar" manifest="${src.dir}/META-INF/MANIFEST.MF"> 
      <fileset dir="${src.dir}"> 
       <include name="**/**.class" /> 
       <include name="**/**.properties"/> 
       <include name="/META-INF/**.*" /> 
       <include name="/META-INF/spring/**.*" /> 
      </fileset> 
     </jar> 
    </target> 

    <target name="all" depends="package-bundle"> 
    </target> 

</project> 

回答

3

首先,什麼叫「嘗試{} build.dest在使罐子」是什麼意思?

不管結果如何,你需要看一看你構建的這一部分:

<jar destfile="${build.dest}/${bundlename}.jar" manifest="${src.dir}/META-INF/MANIFEST.MF"> 
    <fileset dir="${src.dir}"> 
     <include name="**/**.class" /> 
     <include name="**/**.properties"/> 
     <include name="/META-INF/**.*" /> 
     <include name="/META-INF/spring/**.*" /> 
    </fileset> 
</jar> 
  1. 您編譯的類文件是在${build.dest},所以你應該使用$ {} build.dest的根目錄對於<jar>任務的嵌套<fileset>。但是現在您將<fileset>指向您的源代碼文件夾。
  2. 您應該避免將生成的jar文件放在類文件所在的同一目錄中。例如,您可以將該jar放入另一個目錄$ {dist.dir}中。

那麼試試這個:

你有一個屬性:

<property name="dist.dir" value="../build/dist" /> 

然後,

<jar destfile="${dist.dir}/${bundlename}.jar" manifest="${src.dir}/META-INF/MANIFEST.MF"> 
    <fileset dir="${build.dest}"> 
     <include name="**/*.class" /> 
    </fileset> 
    <fileset dir="${src.dir}"> 
     <include name="**/*.properties"/> 
     <include name="/META-INF/**/*.*" /> 
     <include name="/META-INF/spring/**/*.*" /> 
    </fileset> 
</jar> 
+0

謝謝coolcfan – vicky

+0

嘿,我看到您的編輯。當然,您可以使用$ {build.dest}來存儲jar文件;然而,作爲一種常見的做法,我建議將編譯後的類文件和生成的jar文件放在不同的目錄中。例如,Netbeans項目的類文件位於'project/build/classes'中,而生成的jar文件位於'project/dist'中。 – coolcfan

+0

偉大的提示,我會記住,然後沒有必要編輯。謝謝。我真的很感激它 – vicky

相關問題