.Jar dosyalarından sınıflar nasıl kullanılır?


134

Sun for JAR dosyaları için Java eğitimlerini okudum, ancak yine de sorunum için bir çözüm bulamıyorum. Jtwitter.jar adlı bir kavanoz dosyasından bir sınıf kullanmanız gerekiyor, dosyayı indirdim ve çalıştırmayı denedim (dün .jar dosyalarını çift tıklatarak yürütülebildiğini öğrendim) ve Vista bana " [Yol] /jtwitter.jar "klasöründen Ana Sınıf Manifest özelliği yüklenemedi".

.Jar dosyasını kodlayan adam onu ​​içe aktarmamı istiyor, ama .jar dosyasını kodumda nereye saklayacağım? .Jar dosyasını ve .java dosyamı aynı dizine koymayı denedim, işe yaramadı.

Çalışmaya çalıştığım dosya burada: http://www.winterwell.com/software/jtwitter.php

JCreator LE kullanıyorum.


13
Neden bir düşüş var? Bence bu iyi bir soru ve cevaplarda ilginç bilgiler var! (+1)
guerda

Yanıtlar:


34

Her jar dosyası çalıştırılamaz.

Şimdi, kavanozun altında bulunan sınıfları java dosyanızda içe aktarmanız gerekir. Örneğin,

import org.xml.sax.SAXException;

Bir IDE üzerinde çalışıyorsanız, belgelerine başvurmalısınız. Veya en azından hangisini burada kullandığınızı bu iş parçacığında belirtin. Kesinlikle size daha fazla yardımcı olmamızı sağlayacaktır.

Herhangi bir IDE kullanmıyorsanız, lütfen javac -cp seçeneğine bakın. Ancak, programınızı bir jardosyaya paketlemek ve gerekli tüm dosyaları buna dahil etmek çok daha iyi bir fikirdir jar. Sonra, senin jargibi yürütmek için ,

java -jar my_program.jar

Eğer bir olmalı META-INF/MANIFEST.MFGözlerinde farklı dosya jar. Nasıl yapılır için buraya bakın .


eski, biliyorum, ama aslında hiçbir importşeye gerek yok - sadece sınıfın kullanıldığı tam nitelikli sınıf adını yazmaktan kaçınır, sadece basit sınıf adına izin verir ( SAXException) - sadece ad alanını içe
aktarır

173

Diyelim ki Classnamejar dosyasında bulunan sınıfı kullanmamız gerekiyororg.example.jar

Ve kaynağınız dosyada mysource.javaşöyle:

import org.example.Classname;

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

İlk olarak, gördüğünüz gibi, kodunuzda sınıfları içe aktarmanız gerekir. Bunu yapmak için ihtiyacınız varimport org.example.Classname;

İkincisi, kaynağı derlediğinizde jar dosyasına başvurmanız gerekir.

Kullanırken :ve ;derlerkenki farkı not edin

  • İşletim sistemi gibi bir unix altındaysanız:

    javac -cp '.:org.example.jar' mysource.java
  • Pencerelerin altındaysanız:

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

Bundan sonra bayt kodu dosyasını alırsınız mysource.class

Şimdi bunu çalıştırabilirsiniz:

  • İşletim sistemi gibi bir unix altındaysanız:

    java -cp '.:org.example.jar' mysource
  • Pencerelerin altındaysanız:

    java -cp .;org.example.jar mysource

4
Bu gösterimi biraz daha açıklayabilir misiniz? Bu benim sorunumu çözdü, ama ne yazık ki noktalı virgül / kolon bu özel durumda ne demek hiçbir fikrim yok.
23'te cemulate

2
Bu noktalı virgül / kolon hikayesi bana tam gün maliyet getirdi. En azından şimdi buldum, teşekkürler!
Maxim Zubarev

1
@ChaseMeadors Noktalı virgül / iki nokta esasen burada "ve" anlamına gelir. Bu ayırıyor .dan org.example.jar.
duozmo

Gözden geçirme yapıyorsanız, çoğu *PATHdeğişkenden farklıdır : .jar dosyalarının ayrı ayrı adlandırılması gerekir .
duozmo

15

Jar dosyasını sınıf yoluna eklemeniz gerekir. Java sınıfınızı derlemek için:

javac -cp .;jwitter.jar MyClass.java

Kodunuzu çalıştırmak için (MyClass'ın bir ana yöntem içermesi koşuluyla):

java -cp .;jwitter.jar MyClass

Jar dosyasını istediğiniz yere sahip olabilirsiniz. Jar dosyası java dosyanızla aynı dizindeyse, yukarıdaki işlem çalışır.


7

Kodunuzu derlerken / çalıştırırken .jar dosyasını sınıf yolunuza koymanız gerekir. Sonra sadece .jar sınıfların standart ithalat kullanın.


6

Workmad3'ün söylediği gibi, jar yolunuzda olması için jar dosyasına ihtiyacınız vardır. Komut satırından derliyorsanız, bu -classpath bayrağını kullanmak anlamına gelir. (CLASSPATH ortam değişkeninden kaçının; boyun IMO'sunda bir ağrı.)

Bir IDE kullanıyorsanız, lütfen hangisini bize bildirin ve size bu IDE'ye özgü adımlar konusunda yardımcı olabiliriz.


classpath env değişkeni, uygulamanızı çalıştırmak için komut dosyaları veya firedaemon gibi bir şey kullanıyorsanız kullanışlıdır. Küresel olarak kullandığınızda sadece bir acı :)
workmad3

Hâlâ açıkça görmeyi seviyorum.
Jon Skeet

Kabul ediyorum, açıkça görmeyi seviyorum.
J3r3myK
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.