ANT проблема с файлом JAR - PullRequest
3 голосов
/ 21 июня 2011

У меня проблема с созданием рабочего файла JAR.Я хотел бы получить файл jar, который может запускаться сам с помощью команды java -jar myjar.jar

Пока у меня есть

<project default="jar" name="Create Runnable Jar fecrudbreset">
<target name="clean">
    <delete dir="bin"/>
    <delete dir="build"/>
</target>
<target name="compile">
    <mkdir dir="./build"/>
    <javac srcdir="./src" destdir="./build">
        <classpath>
            <pathelement location="./lib/sqljdbc4.jar"/>
        </classpath>
    </javac>
</target>
<target name="jar" depends="compile">
    <mkdir dir="./bin"/>
    <jar destfile="./bin/fecrudbreset.jar" >
        <manifest>
            <attribute name="Main-Class" value="FecruDBreset"/>
            <attribute name="Class-Path" value="."/> 
            <attribute name="Built-By" value="${user.name}"/>
        </manifest>
        <fileset dir="./build"/>
        <zipfileset dir="./lib" includes="sqljdbc4.jar"/>
    </jar>
</target>
</project>

Однако компиляция работает, когда ячтобы запустить приложение, я получаю следующую ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: com/microsoft/sqlserver/jdbc/SQLServerDataSource
    at FecruDBreset.main(Unknown Source)

update: основной класс, который у меня есть, использует пакет по умолчанию.Класс найден и начинает работать, но завершается ошибкой, когда кажется, что он не может найти драйвер sql.Думаю, я не понимаю, почему он не может его найти.

Вот как определяется основной класс:

import java.sql.*;
import com.microsoft.sqlserver.jdbc.*;

public class FecruDBreset
{

/*
 * Used to reset / nuke fecru database
 */
public static void main(String[] args)
{

Кроме того, если я распакую полученный файл jar, содержимое будет выглядеть так:

META-INF/
META-INF/MANIFEST.MF
FecruDBreset.class
sqljdbc4.jar

Обновление 2: мое дерево исходных текстов выглядит следующим образом:

|-- bin
|   `-- fecrudbreset.jar
|-- build
|   `-- FecruDBreset.class
|-- build.xml
|-- lib
|   `-- sqljdbc4.jar
|-- readme.txt
`-- src
    `-- FecruDBreset.java

Кто-нибудь знает, что я делаю неправильно?Большое спасибо заранее.Чад

Ответы [ 5 ]

1 голос
/ 21 июня 2011

@ chadneal: Также, если я разархивирую полученный файл jar, содержимое будет выглядеть так:

META-INF/
META-INF/MANIFEST.MF
FecruDBreset.class
sqljdbc4.jar

Основной Jar не может содержать the sqljdbc4.jar.Вместо этого ссылку на этот Jar следует добавить в путь к классам в манифесте.

1 голос
/ 21 июня 2011

Быстрое предположение.Похоже, он не может найти ваш класс com.microsoft.sqlserver / *

Где находится банка, который содержит это?Ваш путь к классу по умолчанию - просто ".", Но похоже, что вы поместили sqljdbc4.jar в каталог lib внутри вашего jarfile.

Вы можете изменить Class-Path для включения ./lib или переместить sqljdbc4.jarбанка до корня файла.

1 голос
/ 21 июня 2011

Как вы сделали в своем файле ant, вам нужно добавить в ваш путь к классу драйвер sqlserver jdbc. В противном случае Java не найдет его.

Для этого вам нужно добавить файл jar зависимостей в манифест myjar.jar

Вы должны быть в состоянии сделать это с помощью команды jar ant, передав файл manifest.txt, который содержит что-то вроде:

Манифест-Версия: 1.0 Class-Path: sqljdbc4.jar (при необходимости обновите путь) Создано: 1.6.0 (Sun Microsystems Inc.)

См http://download.oracle.com/javase/tutorial/deployment/jar/downman.html

0 голосов
/ 21 июня 2011

Ваш основной класс FecruDBreset зависит от com.microsoft.sqlserver.jdbc.SQLServerDataSource

У вас должен быть драйвер Microsoft SQL в пути к классам.

, поэтому вы должны запустить jar с помощью следующей команды

java -jar myjar.jar -classpath {path_to_microsoft_jdbc_driver}

0 голосов
/ 21 июня 2011

Я думаю, вам не хватает записи пути к классам.

Вы, вероятно, хотите включить свой sql-драйвер непосредственно в папку классов "fatjar" или "uberjar": http://one -jar.sourceforge.net /

Это создаст один Jar-файл, который может быть выполнен напрямую.

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