2012-09-10 44 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

相关问题