Назад | Перейти на главную страницу

Создание jar-файла с MySQL jdbc на solaris

Я создаю Java-приложение, которое использует JDBC для подключения к MySQL. У меня есть ant-скрипт, который компилирует мой код, а затем упаковывает его вместе с log4j, junit, libshout-java и драйвером mysql jdbc в одну исполняемую банку. Все это отлично работает на ubuntu 9.10, мой код подключается к mysql, и все готово.

Однако мой производственный env будет Solaris (мой dev-бокс - ubuntu), и когда я пришел, чтобы собрать и запустить его там, у меня были следующие ошибки.

17 [main] DEBUG com.radiobusi.ShoutGen.ParseConfig  - [SQL, SELECT * FROM RadioBusi.RadioBusi_song JOIN RadioBusi.RadioBusi_playlist WHERE RadioBusi_playlist.Name = 'Placebo 2';]
18 [main] DEBUG com.radiobusi.ShoutGen.ParseConfig  - this is able to be broken up[SQL, SELECT * FROM RadioBusi.RadioBusi_song JOIN RadioBusi.RadioBusi_playlist WHERE RadioBusi_playlist.Name = 'Placebo 2';]
78 [main] ERROR com.radiobusi.ShoutGen  - An error occured instantiating the class ShoutGen
java.lang.ExceptionInInitializerError
        at com.mysql.jdbc.Util.stackTraceToString(Util.java:351)
        at com.mysql.jdbc.Util.<clinit>(Util.java:116)
        at com.mysql.jdbc.NonRegisteringDriver.parseURL(NonRegisteringDriver.java:672)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:277)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at com.radiobusi.ShoutGen.PlayList.<init>(Unknown Source)
        at com.radiobusi.ShoutGen.ShoutGen.<init>(Unknown Source)
        at com.radiobusi.ShoutGen.ShoutGen.main(Unknown Source)
Caused by: java.lang.RuntimeException: Can't load resource bundle due to underlying exception java.util.MissingResourceException: Can't find bundle for base name com.mysql.jdbc.LocalizedErrorMessages, locale en_AU
        at com.mysql.jdbc.Messages.<clinit>(Messages.java:60)
        ... 9 more
Caused by: java.util.MissingResourceException: Can't find bundle for base name com.mysql.jdbc.LocalizedErrorMessages, locale en_AU
        at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1521)
        at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1260)
        at java.util.ResourceBundle.getBundle(ResourceBundle.java:715)
        at com.mysql.jdbc.Messages.<clinit>(Messages.java:58)
        ... 9 more
Exception in thread "main" java.lang.NullPointerException
        at com.radiobusi.ShoutGen.ShoutGen.main(Unknown Source)

Моя локаль базы данных mysql - en_US на solaris, но моя база данных mysql ubuntu также является en_US.

У кого-нибудь есть идеи?

Я не уверен, какая еще информация нужна, поэтому, если вам нужна дополнительная информация, просто дайте мне знать в комментариях.

Банки, которые упаковываются

junit-4.8.1.jar
libshout.jar
log4j-1.2.15.jar
mysql-5.1.6.jar

munderwo@opensolaris:~/ShoutGen-Java$ uname -a
SunOS opensolaris 5.11 snv_111b i86pc i386 i86pc Solaris

Версия MySQL: MySQL 5.1.30

Ура

отметка

PS это кросс пост от https://stackoverflow.com/questions/2036507/building-a-jar-with-mysql-jdbc-on-solaris поскольку это как бы стирает грань между программированием системного администратора.

ОБНОВЛЕНИЕ 1:

следующая цель муравья - это то, как я упаковывал свои банки. Это означает, что jar mysql фактически находится внутри jar и должен быть доступен автоматически

<target name="jar">
        <!-- Capture the path as a delimited property using the refid attribute -->
        <property name="myclasspath" refid="classpath"/>
        <!-- Emit the property to the ant console -->
        <echo message="Classpath = ${myclasspath}"/>
        <mkdir dir="${jar.dir}"/>
        <jar destfile="${dest.file}" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="com.radiobusi.ShoutGen.ShoutGen"/>
            </manifest>
            <zipfileset src="${lib.dir}/junit-4.8.1.jar" includes="**/*.class"/>
            <zipfileset src="${lib.dir}/libshout.jar" includes="**/*.class"/>
            <zipfileset src="${lib.dir}/log4j-1.2.15.jar" includes="**/*.class"/>
            <zipfileset src="${lib.dir}/mysql-5.1.6.jar" includes="**/*.class"/>
        </jar>
    </target>

Думаю причина этой неожиданности, удивления, ошибки пользователя :)

Я удалил любой mysql jdbc из моего каталога lib в моем исходном коде, а затем поместил соединитель mysql jdbc, который поставляется с opensolaris (похоже, что он пришел из студии Sun) в lib / ext java. Как только я это сделал, все, казалось, сработало. При ближайшем рассмотрении я думаю, что у меня мог все еще быть драйвер ubuntu mysql JDBC в моем пути к классу и, вполне возможно, до кроссплатформенной jar. Так что я подозреваю, что это была проблема.

Спасибо за вашу помощь!

Отметка.

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

Как вы ссылались на внешние библиотеки из своей банки? Вы добавили их в Class-Path вашего файла манифеста? Когда вы это сделали, вы использовали относительные или абсолютные пути?