2016-07-26 89 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之前刪除簽名。