1

さて、私はAntでプロジェクトを構成しようとしていますが、これが私が得たものです:

     D:\Dropbox\EclipseWorkspace\PIRS\src\lib>dir
     Volume in drive D is WinMedia
     Volume Serial Number is 8ED9-B662
    
     Directory of D:\Dropbox\EclipseWorkspace\PIRS\src\lib
    
    2012.11.20  16:11    <DIR>          .
    2012.11.20  16:11    <DIR>          ..
    2012.10.16  22:03           315.805 commons-lang3-3.1.jar
    2012.10.23  23:08           176.897 commons-validator-1.4.0.jar
    2012.11.20  15:30    <DIR>          hibernate
    2012.11.16  04:48           253.160 junit-4.10.jar
    2012.10.22  02:02           489.883 log4j-1.2.17.jar
    2012.10.31  23:00         1.581.066 mockito-all-1.9.5.jar
    2012.11.02  19:54           651.643 mybatis-3.1.1.jar
    2012.11.01  04:37           832.960 mysql-connector-java-5.1.22-bin.jar
                   7 File(s)      4.301.414 bytes
                   3 Dir(s)   7.277.907.968 bytes free
    
    D:\Dropbox\EclipseWorkspace\PIRS\src\lib>cd ../..
    
    D:\Dropbox\EclipseWorkspace\PIRS>
    D:\Dropbox\EclipseWorkspace\PIRS>
    D:\Dropbox\EclipseWorkspace\PIRS>ant run
    Buildfile: D:\Dropbox\EclipseWorkspace\PIRS\build.xml
    
    init:
    
    compile:
        [javac] Compiling 1 source file to D:\Dropbox\EclipseWorkspace\PIRS\build
    
    jar:
          [jar] Building jar: D:\Dropbox\EclipseWorkspace\PIRS\dist
    \jar\PIRS.jar
    
    run:
         [java] Exception in thread "main" java.lang.NoClassDefFoundError: org/apach
    e/log4j/Logger
         [java]     at com.nortal.pirs.userinterface.fakestarter.FakeUserInterface.<
    init>(Unknown Source)
         [java]     at com.nortal.pirs.userinterface.fakestarter.FakeUserInterface.m
    ain(Unknown Source)
         [java] Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
    
         [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
         [java]     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
         [java]     at java.security.AccessController.doPrivileged(Native Method)
         [java]     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
         [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
         [java]     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    
         [java]     at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
         [java]     ... 2 more
         [java] Java Result: 1
    
    BUILD SUCCESSFUL
    Total time: 2 seconds

D:\Dropbox\EclipseWorkspace\PIRS>

まず、src/lib フォルダーに log4j があることがわかります。2 番目の部分では、実行時に見つからないことがわかります。かなり奇妙です。コンパイルは正常に行われるため、実行時にそれを見つけることができないようです。

私のbuild.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="PIRS" default="dist" basedir=".">
    <description>PIRS</description>
    <property name="src" location="src"/>
    <property name="build" location="build"/>
    <property name="dist" location="dist"/>
    <property name="lib.dir" location="src/lib"/>
    
    <path id="classpath">        
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
        <fileset dir="${lib.dir}" includes="*.jar"/>
    </path>
    
    <target name="init">
        <mkdir dir="${build}"/>
    </target>
    
    <target name="compile" depends="init">
        <javac includeantruntime="false" srcdir="${src}" destdir="${build}">
        <classpath>
            <path refid="classpath"/>
        </classpath>
        </javac>
    </target>
    
    <target name="jar" depends="compile" description="generate the jar">
        <mkdir dir="${dist}/jar"/>
        <jar destfile="${dist}/jar/PIRS.jar" basedir="${build}">
            <manifest>
                <attribute name="Main-Class" value="com.nortal.pirs.userinterface.fakestarter.FakeUserInterface"/>
            </manifest>
        </jar>
   </target>
   
    <target name="clean" description="clean up" >
        <delete dir="${build}"/>
        <delete dir="${dist}"/>
    </target>
    
    <target name="run" depends="jar">
        <java jar="${dist}/jar/PIRS.jar" fork="true">
        <classpath refid="classpath"/>
            
        </java>
    </target>
        
</project>

実際、ラインは何も変わっていないようです。

さて、それに関するアイデアはありますか?前もって感謝します。

4

1 に答える 1

0

ここでよくある問題に遭遇しました。コマンドで何かを実行すると、プロパティが削除されます。java -jar ...-classpath ...javaその理由はセキュリティです (Jar ファイルは、変更されていないことを確認するためにデジタル署名することができ、同じ内容で機能がハイジャックされた別の依存関係の Jar ファイルを簡単にロードできます)。

解決策は簡単です: で行ったように、Class-Path: ...属性もMANIFEST.MFファイルに含めますMain-Class: ...

于 2012-11-21T08:19:20.893 に答える