Sınıf Yolu ile Yapı Yolu arasındaki fark nedir


86

Bu iki terimle kafam karıştı.

Ayrıca Spring MVC Projesinin src klasörü altında bir dosya oluşturmak için ne yapmalıyım? Bir File nesnesini kullanarak oluşturduğumda, dosyayı C: \ SpringSourceTool içinde oluşturur ... Sanırım bu ClassPath değil mi?

applicationcontextUygulamanın klasörünü veya kökünü nasıl edinebilirim ?

Yanıtlar:


101

İnşa yolu başvurunuzu oluşturmak için kullanılır. Uygulamayı derlemek için gereken tüm kaynak dosyalarınızı ve tüm Java kitaplıklarını içerir.

Sınıf yolu uygulaması yürütülmesi için kullanılır. Bu, java uygulamasını çalıştırmak için gereken tüm java sınıflarını ve kitaplıklarını içerir. Bir Sınıfyolu zorunludur, varsayılan yol, .java sanal makinesi kullanıcı tanımlı bir yol bulamazsa kullanılır. ( bir jar bildirimindeki CLASSPATHortam değişkeni, -cpbayrağı veya Class-Path:özniteliği)


Ancak javac, bir sınıf yolu argümanı alır. Bu parametrenin, derleme yolunu belirtmek için "aşırı yüklenmiş" olduğu söylenebilir mi?
aioobe

4
Hayır. Sınıf yolu argümanı, derleyiciye çalışma zamanında ne olmasını beklemesi gerektiğine dair bir ipucudur, çünkü kullandığınız her sınıfı kendiniz oluşturmazsınız (örn. JFC, Kitaplıklar, ...). Yapı yolu hem kaynak hem de kaynak / derlenmiş bağımlılıkları ve bunların nerede aranacağını içerir.
Johannes Wachter

Bir eklenti geliştirirken gerekli tüm kitaplıkları sınıf yoluna ekledim, ancak hiçbir şey içe aktaramadım. Eclipse, yol inşa etmek için onları ekleyene kadar onları görmedi.
Bax

51

Sınıf yolu, (standart) Java derleyicisine ve Java çalışma zamanına derlenmiş sınıfları nerede bulacağını söylemenin geleneksel yoludur. Genellikle JAR dosya adları ve dizin adları dizisidir. Derleyici ve çalışma zamanı sistemi tarafından kullanılan sınıf yolu aynı olmak zorunda değildir , ancak genellikle , özellikle küçük bir proje için olmalıdır .

Buildpath, standart Java terminolojisi değildir. Tipik bir IDE'nin bir uygulamayı oluşturan "projeler" arasındaki ilişkiyi tanımlamasının daha zengin bir yolu için kullanılan bir terimdir. IDE, Java kodunu derlemek için sınıf yolunu ve kaynak yolunu ve onu çalıştırmak için sınıf yolunu bulmak için bunu kullanır. IDE ayrıca, kodunuzu ve bağımlılıklarını (örneğin) bir WAR dosyası olarak nasıl paketleyeceğinizi anlamak için derleme yolunu kullanır.

Örneğin, bir proje için Eclipse oluşturma yolu, bağlı olduğu diğer projeleri içerir ve projenin içerdiği / dayandığı tüm ek kitaplık JAR'larını listeler. Ayrıca, mevcut projedeki aşağı akış projelerinin bağlı olabileceği paketleri de listeler.

(Projeniz için Maven kullanıyorsanız, IDE yapı yolu mekanizması POM dosyalarında bildirilen bağımlılıklara göre ikincildir. Örneğin, m2eclipse ile Eclipse kullanıldığında, yapı yolu POM dosyalarından sentezlenir.)


27

Sınıf yolu, çalışma zamanında derlenmiş sınıfları ve kaynakları yüklemek için kullanılır.

Derleme yolu, projenizi oluşturmak için gereken bağımlılıkları bulmak için derleme zamanında kullanılır.


.classDerleme yolunun derlenmesi gereken kaynak dosyaları bulmak için kullanılırken , sınıf yolunun dosyaları (ve diğer derlenmiş kaynakları) bulmak için kullanıldığını söyleyebilir misiniz ?
Adam

1
@Adam Bunun tamamen doğru olduğunu sanmıyorum. Derleme yolu bazen kaynak dosyaları derlemek için .class dosyalarına ihtiyaç duyar. Bu nedenle, derleme yolu sahne arkasındaki sınıf yolunu da kullanır. Java CLI kullanarak bir java projesi derlemek ve çalıştırmak için biraz zaman ayırırsanız, bunu görebilirsiniz. Hem javac hem de java komutunun bir sınıf yolu seçeneği vardır çünkü her ikisinin de buna ihtiyacı olabilir.
intrepistar_88

4

Her Java projesinin, projeyi derlemek için gereken tüm bağımlılıkları belirten kendi yapı yolu vardır. Bu bağımlılıklar, çalışma alanındaki diğer Java projelerinden, Java arşivi .jar dosyalarından veya .class dosyalarını içeren klasörlerden gelebilir.

CLASSPATH ortamında yalnızca .class dosyalarını (yani, jar, zip dosyaları - Inside jar, zip dosyaları) belirtmeniz gerekir, yani Java Virtual Machine (JVM) Java sınıf dosyalarını bulmasına yardımcı oluyorsunuz

Ayrıca Spring MVC Projesinin src klasörü altında bir dosya oluşturmak için ne yapmalıyım? Bir File nesnesini kullanarak oluşturduğumda, dosyayı C: \ SpringSourceTool içinde oluşturur ...

JVM'nin başlatıldığı yer burasıdır, dosyayı başka bir yerde oluşturmak istiyorsanız, buradan göreceli yolu kullanın.

Daha fazla bilgi için buna ve buna bakın .


Cevabında yolu inşa et bile değilmişsin
aioobe

4

Andreas_D'nin cevabına , kodunuzun kullandığı harici paketleri ve sınıfları bulmak için IDE / derleyici tarafından yapı yolunun gerekli olduğunu açıklamak için eklemek istiyorum . Bunlara bazen 'bağımlılıklar' diyoruz .

Not: Bu harici paketler sıkıştırılmış bir .jar dosyası içinde paketlenebilir veya aslında bir 'kitaplık' içinde paketlenmiş birkaç jar dosyası olabilir . Bir kütüphane veya kütüphane grubu genellikle bir 'çerçeve' oluşturur .

Kodunuz başkaları tarafından yazılan kodu gerektiriyorsa , komutu kullanarak bunları sınıfınıza aktarabilirsinizimport . Ancak, derleyici veya IDE'nin bu sınıfların nerede bulunduğunu bilmesi gerektiğinden, bu komut kendi başına yetersizdir. Bunu yapı yolunda belirtirsiniz .

classpathÖte yandan kodunuzun gerçek yürütülmesi sırasında herhangi bir bağımlılıkları bulmak için uygulamayı çalıştıran JVM söyler.

Ayrıca not etmek gerekir: Classpath, JVM tarafından kullanılmak içindir.

Buildpath, IDE / derleyici tarafından kullanılmak içindir ve geliştirme ortamınızdan sınıf yolunu oluşturmanın bir yoludur. Yapı yolunuzu IDE'niz aracılığıyla yapılandırdığınızda, projenizde .classpath adlı gizli bir dosyayı da yapılandırmış olursunuz. Bu, dağıtım sırasında JVM'ye sınıf yolu sağlamak için kullanılır.


1

Sınıf yolu ( Wikipedia'dan ):

Klasik dinamik yükleme davranışına benzer şekilde, Java programlarını çalıştırırken, Java Sanal Makinesi sınıfları bulur ve tembel olarak yükler (bir sınıfın bayt kodunu yalnızca sınıf ilk kullanıldığında yükler). Sınıf yolu, Java'ya bu sınıfları tanımlayan dosyalar için dosya sisteminde nereye bakacağını söyler.

Sanal makine, sınıfları şu sırayla arar ve yükler:

bootstrap sınıfları: Java Platformunun temelini oluşturan sınıflar (Java Sınıf Kitaplığının genel sınıflarını ve bu kitaplığın işlevsel olması için gerekli olan özel sınıfları içerir).

uzantı sınıfları: JRE veya JDK'nın uzantı dizininde bulunan paketler,

jre / lib / ext / kullanıcı tanımlı paketler ve kitaplıklar

Varsayılan olarak, yalnızca JDK standart API paketlerine ve uzantı paketlerine, bunların nerede bulunacağını ayarlamaya gerek kalmadan erişilebilir. Tüm kullanıcı tanımlı paketlerin ve kitaplıkların yolu komut satırında (veya sınıfları içeren Jar dosyasıyla ilişkili Manifest'te) ayarlanmalıdır.

Basitçe söylemek gerekirse - programınız çalışırken, JVM sınıfları yalnızca gerektiği gibi yükler. Bir sınıfa ihtiyaç duyulduğunda, JVM, bayt kodunun nereden yükleneceğini bilmek için sınıf yoluna bağlı olacaktır (yani: .classdosyalar).

Öte yandan, derleme yolu , genellikle bir projenin kaynak kodunu derlemek için gereken ek kitaplıkları nerede arayacağını bilmek için Eclipse gibi bir IDE tarafından kullanılır. Çalışma sırasında derleme yolu kullanılmaz.

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.