Як користуватися класами з .jar файлів?


134

Я читав підручники Java на файлах Sun for JAR, але все ще не можу знайти свою проблему. Мені потрібно використовувати клас з файлу jar під назвою jtwitter.jar, я завантажив файл і спробував його виконати (вчора я дізнався, що .jar файли можна виконати подвійним клацанням на них), і Vista дала мені помилку, сказавши " Помилка завантаження атрибута Manifest основного класу з [path] /jtwitter.jar ".

Хлопець, який зашифрував файл .jar, хоче, щоб я імпортував його, але де я зберігаю .jar файл, щоб імпортувати його у свій код? Я спробував розмістити як .jar файл, так і мій .java файл в одному каталозі, не вийшло.

Файл, над яким я намагаюся працювати, знаходиться тут: http://www.winterwell.com/software/jtwitter.php

Я використовую JCreator LE.


13
Чому існує потворний рух? На мою думку, це гарне запитання і у відповідях є цікава інформація! (+1)
guerda

Відповіді:


34

Не кожен файл jar виконується.

Тепер вам потрібно імпортувати класи, які знаходяться під баночкою, у свій файл Java. Наприклад,

import org.xml.sax.SAXException;

Якщо ви працюєте над IDE, то вам слід ознайомитися з його документацією. Або принаймні вкажіть, який саме ви використовуєте тут у цій темі. Це безумовно дасть нам змогу допомогти вам далі.

Якщо ви не використовуєте жодної IDE, перегляньте опцію javac -cp . Однак набагато краще ідеї упакувати програму у jarфайл і включити всі необхідні jars у цьому. Потім, щоб виконати ваш jar, як,

java -jar my_program.jar

у вас повинен бути META-INF/MANIFEST.MFфайл у вашому jar. Дивіться тут , як робити.


старий, я знаю, але насправді нічого не потрібно import- він просто уникає необхідності писати повністю кваліфіковане ім’я класу, який коли-небудь використовується, дозволяючи просто просте ім’я класу ( SAXException) - вид просто імпорту простору імен
user85421

173

Скажімо, нам потрібно використовувати клас, Classnameякий міститься у файлі jarorg.example.jar

І ваше джерело знаходиться у файлі Ось так mysource.java:

import org.example.Classname;

public class mysource {
    public static void main(String[] argv) {
    ......
   }
}

По-перше, як бачите, у своєму коді потрібно імпортувати класи. Для цього вам потрібноimport org.example.Classname;

По-друге, коли ви збираєте джерело, вам слід посилатися на файл jar.

Зверніть увагу на різницю у використанні :та ;при складанні

  • Якщо ви перебуваєте під операційною системою unix:

    javac -cp '.:org.example.jar' mysource.java
  • Якщо ви знаходитесь під вікнами:

    javac -cp .;org.example.jar mysource.java

Після цього ви отримуєте файл байт-коду mysource.class

Тепер ви можете запустити це:

  • Якщо ви перебуваєте під операційною системою unix:

    java -cp '.:org.example.jar' mysource
  • Якщо ви знаходитесь під вікнами:

    java -cp .;org.example.jar mysource

4
Чи можете ви пояснити цю нотацію трохи більше? Це вирішило мою проблему, але, на жаль, у мене НЕ ІДЕЯ, що означає крапка з комою / двокрапкою в даному випадку.
cemulate

2
Ця історія з комою / двокрапкою просто коштувала мені цілий день. Принаймні, я знайшов це зараз, дякую!
Максим Зубарев

1
@ChaseMeadors Точка з комою / двокрапкою по суті означає "і". Це відділення .від org.example.jar.
дуозмо

Якщо ви скуповуєте, слід звернути увагу на відмінність від більшості *PATHзмінних: .jar-файли повинні бути названі індивідуально .
дуозмо

15

Вам потрібно додати файл jar в класний шлях. Щоб скласти свій клас java:

javac -cp .;jwitter.jar MyClass.java

Щоб запустити свій код (за умови, що MyClass містить основний метод):

java -cp .;jwitter.jar MyClass

Ви можете мати файл jar де завгодно. Вищеописане працює, якщо файл jar знаходиться в тому ж каталозі, що і ваш файл java.


7

Під час компіляції / запуску коду потрібно ввести .jar файл у ваш класний шлях. Тоді ви просто використовуєте стандартний імпорт класів у .jar.


6

Як каже workmad3, вам потрібно, щоб файл jar був у вашому класі. Якщо ви компілюєте з командного рядка, це означатиме використання прапора -classpath. (Уникайте змінної середовища CLASSPATH; це біль у шиї ІМО.)

Якщо ви використовуєте IDE, будь ласка, повідомте нам, який саме, і ми можемо допомогти вам в кроках, характерних для цього IDE.


Змінна classpath env корисна, якщо для запуску програми ви використовуєте сценарії чи щось на зразок звільненого файлу. Це лише біль, коли ти користуєшся ним у всьому світі :)
workmad3

Я все одно люблю це чітко бачити.
Джон Скіт

Я згоден, я люблю це чітко бачити.
J3r3myK
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.