2016-07-26 65 views
1

我想用apache建立一个* .jar文件。我开始与编译目标:java/ant jar文件SecurityException

<path id="path.pdf"> 
    <pathelement path="${project.client.lib.dir}/rhino.jar" /> 
    <pathelement path="${project.client.lib.dir}/jPDFViewer.jar" /> 
</path> 

后编译目标我想建立的jar:

<target name="pdfjar" depends="pdfcompile" > 
    <property name="jar.file" value="mespasPdfViewer.jar" /> 
    <property name="jar.file" value="mespasPdfViewer.jar" /> 
    <property name="main-class" value="com.mespas.client.pdfviewer.MespasPDFViewer" /> 
    <property name="pdfclasses.dir" value="pdfclasses" /> 

    <mkdir dir="${jar.dir}"/> 
    <mkdir dir="${jar.dir}/lib"/> 
    <copy file="${project.client.lib.dir}/rhino.jar" tofile="${jar.dir}/lib/rhino.jar"/> 
    <copy file="${project.client.lib.dir}/jPDFViewer.jar" tofile="${jar.dir}/lib/jPDFViewer.jar"/> 

    <jar destfile="${jar.dir}/${jar.file}" basedir="${pdfclasses.dir}" > 
     <zipgroupfileset dir="${jar.dir}/lib" includes="rhino.jar jPDFViewer.jar" excludes="META-INF/*.SF,META-INF/*.DSA,META-INF/*.RSA"/> 
     <manifest> 
      <attribute name="Main-Class" value="com.mespas.client.pdfviewer.MespasPDFViewer"/> 
     </manifest>   
     <fileset dir="${project.classes.dir}"> 
      <include name="com/mespas/client/pdfviewer/*.class" /> 
     </fileset> 
    </jar> 

    <copy file="${jar.dir}/${jar.file}" tofile="${project.client.lib.dir}/${jar.file}" overwrite="true" /> 
    <delete file="${jar.file}"/> 
    <delete includeEmptyDirs="true"> 
     <fileset dir="${pdfclasses.dir}" /> 
    </delete> 

</target> 

构建

​​

与path.pdf为随后被定义工作正常,但是当我尝试启动罐子时,出现以下异常:

Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes 

我在做什么错?我从外部容器(rhino.pdf和jPDFViewer.pdf)中排除了META-INF文件夹,但启动jar时仍然会出现此异常。感谢任何指针。

回答

0

我设法找到一个很好的解决方案。我调整了构建目标如下:

<target name="pdfjar" depends="pdfcompile" > 
    <property name="jar.file" value="mespasPdfViewer.jar" /> 
    <property name="jar.dir" value="pdfViewer" /> 
    <property name="main-class" value="com.mespas.client.pdfviewer.MespasPDFViewer" /> 
    <property name="pdfclasses.dir" value="pdfclasses" /> 

    <mkdir dir="${jar.dir}"/> 
    <mkdir dir="${jar.dir}/lib"/> 
    <copy file="${project.client.lib.dir}/rhino.jar" tofile="${jar.dir}/lib/rhino.jar"/> 
    <copy file="${project.client.lib.dir}/jPDFViewer.jar" tofile="${jar.dir}/lib/jPDFViewer.jar"/> 


    <jar jarfile="${jar.dir}/deps.jar"> 
     <zipgroupfileset dir="${jar.dir}/lib"> 
      <include name="**/*.jar" /> 
     </zipgroupfileset> 
    </jar> 
    <sleep seconds="1" /> 
    <jar jarfile="${jar.dir}/mespasPdfViewer.jar" basedir="${pdfclasses.dir}"> 
     <zipfileset src="${jar.dir}/deps.jar" excludes="META-INF/*.SF" /> 
     <manifest> 
      <attribute name="Main-Class" value="com.mespas.client.pdfviewer.MespasPDFViewer" /> 
     </manifest> 
    </jar> 

    <copy file="${jar.dir}/${jar.file}" tofile="${project.client.lib.dir}/${jar.file}" overwrite="true" /> 
    <delete file="${jar.file}"/> 
    <delete includeEmptyDirs="true"> 
     <fileset dir="${pdfclasses.dir}" /> 
    </delete> 

</target> 

这允许脚本在重新包装jar之前删除签名。