проблема с сборкой Java Ant (неправильная установка classpath) - PullRequest
0 голосов
/ 09 августа 2011

Что не так с этим файлом сборки. В основном это два jar-файла AbsoluteLayout.jar и swing-layout-1.0.3.jar

<?xml version="1.0"?>
  <project>
  <property name="srcDir" location="src"/>
  <property name="buildDir" location="build"/>
  <property name="distDir" location="dist"/>
  <property name="library" value="lib/"/>


  <path id="classpath">
    <fileset dir="${library}">
      <!--<include name="**/*.jar"/>-->
      <include name="*.jar"/>
    </fileset>
  </path>

  <property name="myclasspath" refid="classpath"/>
    <!-- Emit the property to the ant console -->
      <echo message="Classpath = ${myclasspath}"/>

  <target name="init">
    <mkdir dir="${buildDir}"/>
    <mkdir dir="${distDir}"/>
  </target>

  <target name="compile" depends="init">
    <javac srcdir="${srcDir}" destdir="${buildDir}" classpathref="classpath"/>
  </target>

  <target name="dist" depends="compile">
    <jar destfile="${distDir}/pro.jar" basedir="${buildDir}">
      <manifest>
        <attribute name="Built-By" value="${user.name}"/>
        <attribute name="Main-Class" value="Main.Class"/>
      </manifest>
    </jar>
    <!--<jar destfile="${distDir}/package-src.jar" basedir="${srcDir}"/>-->

  </target>

  <target name="clean">
    <delete dir="${buildDir}"/>
    <delete dir="${distDir}"/>
  </target>
</project>

Там написано BUILD SUCCESSFUL. Когда я запускаю файл ant в терминале. Но когда Я запускаю файл jar, который выдает следующую ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jdesktop/layout/GroupLayout$Group
Caused by: java.lang.ClassNotFoundException: org.jdesktop.layout.GroupLayout$Group
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)

Почему не включены два файла в classpath?

Ответы [ 2 ]

1 голос
/ 09 августа 2011

Но когда я запускаю файл jar, он выдает следующую ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError

Это ошибка во время выполнения. Jesktop jar недоступен в classpath файла jar во время работы.

1008 * попробовать *

java -cp .;path_jdesktop.jar; yourclass.jar

Вы можете добавить classpath в файл манифеста файла jar также:

Class-Path: jar1-name jar2-name directory-name/jar3-name

Так что-то вроде:

 <manifest>
    <attribute name="Built-By" value="${user.name}"/>
    <attribute name="Main-Class" value="Main.Class"/>
    <attribute name="Class-Path" value="lib/jdesktop.jar"/>
  </manifest>

И при запуске файла jar убедитесь, что в этом каталоге lib есть каталог lib и jdesktop.jar.

0 голосов
/ 09 августа 2011

Вы можете использовать структуру пути для построения вашего пути к классам.Например, вы можете прочитать все jar-файлы из вашего каталога lib:

<target name="init-classpath" depends="retrieve">
    <path id="lib.classpath">
        <fileset dir="${lib}">
            <include name="*.jar" />
        </fileset>
    </path>
</target>

Но classpath принимает список путей, разделенных пробелами, поэтому вам нужно сгладить структуру вашего пути:

<pathconvert property="mf.classpath" pathsep=" ">
    <path refid="lib.classpath" />
    <flattenmapper />
</pathconvert>

Наконец, поместите ваш mf.classpath в свойство Class-Path:

<jar destfile="${jars}/${result.name}.${result.ext}">
    <manifest>
        ...
        <attribute name="Class-Path" value="${mf.classpath}" />
    </manifest>
    ...
</jar>

В этом случае вам необходимо развернуть файлы библиотеки в том же каталоге, что и файл вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...