Как использовать классы из файлов .jar?

134

Я прочитал учебники по Java для Sun для файлов JAR, но все еще не могу найти решение своей проблемы. Мне нужно использовать класс из jar-файла с именем jtwitter.jar, я скачал этот файл и попытался его выполнить (вчера я узнал, что файлы .jar можно выполнить, дважды щелкнув по ним), и Vista выдавала мне сообщение об ошибке " Не удалось загрузить атрибут манифеста основного класса из [path] /jtwitter.jar ".

Парень, который кодировал файл .jar, хочет, чтобы я его импортировал, но где мне хранить файл .jar, чтобы импортировать его в мой код? Я попытался поместить и файл .jar, и мой файл .java в один каталог, не получилось.

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

Я использую JCreator LE.

Гаурав Дадхания
источник
13
Почему есть отрицательный голос? На мой взгляд, это хороший вопрос и в ответах есть интересная информация! (+1)
Герда

Ответы:

34

Не каждый файл JAR является исполняемым.

Теперь вам нужно импортировать классы, которые находятся под jar, в ваш файл java. Например,

import org.xml.sax.SAXException;

Если вы работаете над IDE, вам следует обратиться к ее документации. Или, по крайней мере, укажите, какой из них вы используете здесь, в этой теме. Это определенно позволит нам помочь вам в дальнейшем.

И если вы не используете какую-либо IDE, пожалуйста, посмотрите опцию javac -cp . Тем не менее, гораздо лучше упаковать вашу программу в jarфайл и включить в нее все необходимые jarэлементы. Затем, чтобы выполнить ваш 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
Не могли бы вы объяснить это обозначение немного больше? Это решило мою проблему, но, к сожалению, у меня НЕТ ИДЕИ, что означает точка с запятой / двоеточие в данном конкретном случае.
сентября
2
Эта точка с запятой / двоеточие стоила мне всего дня. По крайней мере, я нашел это сейчас, спасибо!
Максим Зубарев
1
@ChaseMeadors Точка с запятой / двоеточие по существу означает «и» здесь. Это отделяется .от org.example.jar.
duozmo
Если вы занимаетесь скиммингом, обратите внимание на отличие от большинства *PATHпеременных: файлы .jar должны иметь индивидуальные имена .
duozmo
15

Вам нужно добавить файл jar в путь к классам. Чтобы скомпилировать ваш Java-класс:

javac -cp .;jwitter.jar MyClass.java

Для запуска вашего кода (при условии, что MyClass содержит метод main):

java -cp .;jwitter.jar MyClass

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

kgiannakakis
источник
7

Вам нужно поместить файл .jar в ваш путь к классу при компиляции / запуске вашего кода. Тогда вы просто используете стандартный импорт классов в .jar.

workmad3
источник
6

Как говорит workmad3, файл jar должен находиться в вашем пути к классам. Если вы компилируете из командной строки, это будет означать использование флага -classpath. (Избегайте переменной среды CLASSPATH; это боль в шее, ИМО.)

Если вы используете IDE, сообщите нам, какой именно, и мы сможем помочь вам с действиями, специфичными для этой IDE.

Джон Скит
источник
Переменная classpath env полезна, если вы используете скрипты или что-то вроде firedaemon для запуска вашего приложения. Это только боль, когда вы используете его в глобальном масштабе :)
workmad3
Мне все еще нравится видеть это явно.
Джон Скит
Я согласен, мне нравится видеть это в явном виде.
J3r3myK