【问题标题】:run java project in ant在ant中运行java项目
【发布时间】:2014-05-11 23:12:00
【问题描述】:

我试图在 ant 中运行我的 java 项目(两个程序,服务器和客户端)。这是我的 build.xml

<project name="myproject" default="run" basedir=".">
<description>Client Server gui project</description>

<property name="srcdirserver" location="src/src_server"/>
<property name="srcdirclient" location="src/src_client"/>
<property name="lib" location="lib"/>
<property name="build" location="build"/>
<property name="buildserver" location="build/server"/>
<property name="buildclient" location="build/client"/>
<property name="dest_server" location="dest-server"/>
<property name="dest_client" location= "dest-client"/>
<property name="examples" location="examples"/>
<property name="doc" location="doc"/>




   <!-- CLEAN -->
   <target name="clean">
      <delete dir="${build}"/>
      <delete dir="${dest_server}"/>
     <delete dir="${dest_client}"/>
   </target>

   <!-- COMPILE (Dummy)-->
   <target name="compile" depends="clean,compileserver,compileclient,jarserver,jarclient,documentation">
   </target>

   <!-- DOCUMENTATION -->
   <target name="documentation">
   <javadoc sourcepath="${srcdirserver}" destdir="${doc}" encoding="UTF-8" charset="UTF-8"></javadoc>
   </target>

   <!-- COMPILE (Server code)-->
   <target name="compileserver" depends="clean">
      <mkdir dir="${buildserver}"/>
      <javac includeantruntime="false"
             srcdir="${srcdirserver}"
             destdir="${buildserver}" 
             encoding="UTF-8"
             classpath="${src}"/>
   </target>
   <!-- COMPILE (Client code)-->
   <target name="compileclient" depends="clean">
      <mkdir dir="${buildclient}"/>
      <javac includeantruntime="false"
             srcdir="${srcdirclient}"
             destdir="${buildclient}" 
             encoding="UTF-8"
             classpath="${lib}/swt.jar:${src}"/>
   </target> 
   <!-- BUILD JAR (server) -->
    <target name="jarserver" depends="clean,compileserver">
    <mkdir dir="${dest_server}"/>
    <jar destfile="${dest_server}/myserver.jar" 
         basedir="${buildserver}">
    <manifest>
    <attribute name="Main-Class"
    value="game_server.main.Init"/>
    </manifest>
    </jar>
    <mkdir dir="${dest_server}/examples"/>
    <copy todir="${dest_server}/examples" >  
        <fileset dir="${examples}" includes="**"/>  
    </copy>
    </target>

    <!-- BUILD JAR (client) -->
    <target name="jarclient" depends="clean,compileclient">
    <mkdir dir="${dest_client}"/>
    <jar destfile="${dest_client}/myclient.jar" 
         basedir="${buildclient}">
    <manifest>
    <attribute name="Main-Class"
    value="game_client.main.Gui"/>
    <attribute name="Class-Path"
    value="lib/swt.jar"/>
    </manifest>
    </jar>
    <mkdir dir="${dest_client}"/>
    <mkdir dir="${dest_client}/lib"/>
    <copy file="${lib}/swt.jar"
    todir="${dest_client}/lib"/>
    </target>

   <!-- RUN -->
    <target name="run" depends="compile,jarserver,jarclient">
       <parallel>
           <java jar="${dest_server}/myserver.jar" dir="${dest_server}" fork="true"/>
           <java jar="${dest_client}/myclient.jar" dir="${dest_client}" fork="true"/>
       </parallel>
    </target>
</project>

服务器工作正常,但带有 gui 的客户端已成功编译/归档到 jar 中,但是当我运行它时,它会抛出此错误: /编辑:我发现我使用了错误的 swt.jar 版本,我现在正确下载,但仍然收到类似的错误:/

run:
     [java] OpenJDK 64-Bit Server VM warning: You have loaded library /home/blackened/.swt/lib/linux/x86_64/libswt-gtk-4332.so which might have disabled stack guard. The VM will try to fix the stack guard now.
     [java] It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
     [java] Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
     [java]     no swt-gtk-4332 in java.library.path
     [java]     no swt-gtk in java.library.path
     [java]     Can't load library: /home/blackened/.swt/lib/linux/x86_64/libswt-gtk-4332.so
     [java]     Can't load library: /home/blackened/.swt/lib/linux/x86_64/libswt-gtk.so
     [java]     /home/blackened/.swt/lib/linux/x86_64/libswt-gtk-4332.so: /home/blackened/.swt/lib/linux/x86_64/libswt-gtk-4332.so: Kódovanie dát v ELF súbore nie je little-endian (Possible cause: endianness mismatch)
     [java] 
     [java]     at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
     [java]     at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
     [java]     at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
     [java]     at org.eclipse.swt.internal.Converter.wcsToMbcs(Unknown Source)
     [java]     at org.eclipse.swt.internal.Converter.wcsToMbcs(Unknown Source)
     [java]     at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
     [java]     at game_client.main.Gui.open(Unknown Source)
     [java]     at game_client.main.Gui.main(Unknown Source)
     [java] Java Result: 1

我使用 Fedora 18 (Spherical Cow) 操作系统。任何建议表示赞赏。

【问题讨论】:

    标签: java ant swt


    【解决方案1】:

    在我看来,SWT 正在寻找这 2 个 jar 的 32 位版本,但从路径中的 x86_64 来看,您安装的只是 64 位版本。

    另外,你说你在 Fedora 上,但它正在尝试加载似乎与 Windows 相关的 jar。

    “不满意的链接”错误可能来自它试图查找不存在的 DLL,而不是它应该在 Linux 上查找的 .so 文件。

    这可能会有所帮助: http://www.eclipse.org/swt/faq.php#missingdll

    【讨论】:

    • 我发现我的电脑中缺少 /usr/lib/jni 文件夹,我应该安装什么?我找到了大量的 ubuntu 教程,但没有找到 fedora :(
    • 我自己是一个 Ubuntu 人,但从这个文档看来,64 位 JNI 应该默认随 Fedora 一起提供:docs.fedoraproject.org/en-US/Fedora_Core/6/html/Release_Notes/…。所以可能是你的 Java 安装搞砸了。
    • 您可能需要 JNI 库的客户端。例如,在 Ubuntu 上,有一个名为 libswt-gtk-3-jni 的包,它被列为 Standard Widget Toolkit for GTK+ JNI library。您可能需要这样的包裹。有一个名为libswt3-gtk2.x86_64 的 yum 包,我可以看到它也可能会发挥作用,具体取决于您使用的 GTK 版本。您可能需要该软件包或(我认为存在的)libswt3-gtk3.x86_64
    • 是的,但这可能适用于 CentOS。 (没有可用的软件包 libswt3-gtk2.x86_64。/没有可用的软件包 libswt3-gtk3.x86_64。)/编辑:所以我尝试卸载 gtk,并损坏了我的 Fedora(在卸载中心变暗:[)
    • 您或许可以尝试从 tty 重新安装它。 libswt 没有任何类似名称的包含 jni 的包?
    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2011-11-04
    • 2014-02-22
    • 2023-03-20
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多