Meta etiketler nedir, nasıl doldurulur ve doğru kontrol edilir: uygulamadan örnekler. Yapıyı anlama ve CWM kurtarma için bir .zip paketi derleme Meta bilgi nedir

  • 05.11.2019

Meta etiketler nelerdir? Meta etiketleri, kapsayıcıda bulunan özel html etiketleridir. ve site hakkındaki bilgileri tarayıcılara ve arama motorlarına iletmek için tasarlanmıştır.Örneğin, kaynağınızı tararken, arama robotları sayfa başlıklarını, site açıklamasını, anahtar kelimeleri, yazar verilerini ve etiketlerde bulunan diğer bilgileri toplar. . Tarayıcı, kullanıcının sitesinin sayfasını göstermeden önce, sitenin bir PC veya akıllı telefon için hangi biçimde görüntülenmesi gerektiğini anlamak için aynısını yapar.

Bu materyalde meta etiketler bizim tarafımızdan prizma üzerinden değerlendirilecektir. Ve bunları web yöneticisinin araçlarını kullanarak doldurmak, analiz etmek ve kontrol etmek için temel kuralları öğrenebileceksiniz.

Meta etiket türleri:

  • Başlık ( Başlık) — sayfa başlıkları;
  • tanım( transkripsiyon) — sayfanın kısa açıklaması;
  • anahtar kelimeler ( anahtar kelimeler) - anahtar kelimeler;
  • teknik meta etiketler (sayfanın doğru görüntülenmesinden sorumludur).

Meta etiketler nasıl doğru doldurulur

SEO açısından, bir sitenin ana meta etiketleri Başlık ve Açıklama'dır. Bu nedenle, doldurmalarının doğruluğunu dikkate alacağız. Hepsinin etiketler arasında bulunması gerektiğini tekrarlıyoruz. ve kodun başka bir yerinde değil.

Siteniz CMS'de yapılmışsa, bölümü meta etiketlerle düzenlemek için özel bir eklenti veya modül yüklemeniz gerekir.

Başlık

meta etiket sayfanın başlığından sorumludur ve tarayıcı sekmesinde bir metin satırı olarak görüntülenir.</p> <p>Sitenin arama motoru tanıtımı için, anahtar kelimenin Başlığın başlangıcına mümkün olduğunca yakın olması veya ilk olması gerekir. Site herhangi bir bölgede tanıtılıyorsa şehrin veya bölgenin adını yazıyoruz. Bunu bir satış veya açıklayıcı katkı maddesi takip eder. Sonunda, başlığı benzersiz kılmak için düz çizgiden sonra sitenin veya şirketin adını ekleriz.</p> <p><b>Örneğin:</b></p> <ol><li>Ticari bir site için: <i>«Moskova'da laptop satın alın - online mağazada 19990 r'den fiyatlar | site.ru"</i></li> <li>bilgi sitesi için: <i>«Evde aloe nasıl yetiştirilir | Bahçıvan</i>»</li> </ol><p>Başlığın arama motorları sonuçlarında gösterildiğinde kesilmemesi için başlığın uzunluğu 65 karakterden fazla olmamalıdır.</p><p> <title>Sayfa başlığı

Tanım

Açıklama meta etiketi, sayfadaki bilgilerin özünü birkaç cümleyle açıklamakla sorumludur. Genellikle arama motoru, arama sonuçlarında bir snippet oluşturmak için bu etiketten bilgi alır (çoğunlukla Google bunu, daha az sıklıkla Yandex yapar).

Açıklama, aynı zamanda, anahtar kelimenin doğrudan bir oluşumunu (mümkünse başka bir kelime formuyla tamamlanmalıdır), teklifinizin avantajlarından bahsetmeli ve ayrıca sayfanın ana içeriği için bir tanıtım görevi görmelidir. Yukarıda bahsettiğimiz iki örnek için sayfa açıklamaları oluşturmaya çalışalım.

Örnekler:

  1. “Moskova'da bir dizüstü bilgisayar satın alın. Çevrimiçi mağazada 19.990 ruble fiyata bir dizüstü bilgisayar sipariş edin. Teslimat ücretsizdir. 2 yıl garanti."
  2. Evde aloe nasıl yetiştirilir. Gardener dergisi evde aloe bitkisi yetiştirmenin sırlarını paylaşıyor.»

Uzunluk 140 karakterden fazla değil. Saf html'de şöyle görünür:

anahtar kelimeler

Anahtar kelimeler meta etiketi, sayfanın tanıtıldığı bir dizi anahtar kelimedir. Ancak, bugün bu özellik zaten zorunlu değildir ve isteğe bağlıdır, bu yüzden SEO'nun “altın çağında” çok suistimal edildi ve arama motorları pratik olarak buna dikkat etmiyor. Yine de anahtar kelimeleri doldurmaya karar verirseniz, bunu sadece ilk formdaki kelimeleri virgül olmadan listeleyerek yapmak daha iyidir:

"Moskova'da bir dizüstü bilgisayar satın alın sipariş fiyatı maliyet rublesi çevrimiçi mağaza katalog teslimat garantisi"

Herhangi bir uzunluk, ama çok kıskanç olmamalısın. Doğru html şöyle yazılır:

Ayrıştırıcıyı kullanarak rakiplerin meta etiketlerini yalnızca birkaç tıklamayla ayrıştırabilirsiniz.

Teknik meta etiketler

  • Expires, belgenin sona erme tarihidir.
  • Pragma - önbelleğe alınmış verilerin kullanımının yasaklanması, bilgilerin sunucudan yüklenmesi gerekir.
  • İçerik Türü - içerik türü ve kodlama.
  • İçerik dili - sayfanın/sitenin dili.
  • Önbellek Kontrolü - belgenin önbelleğe alınıp alınmayacağını ve öyleyse nasıl yapılacağını ayarlar.
  • Robotlar - tek tek sayfaları indekslemekten sorumludur.
  • belge durumu - indeksleme sıklığı.

Meta etiketlerin olmaması, sayfaların görüntülenmesini, dizine eklenmesini ve sıralamasını olumsuz etkileyebilir.

CMS'ye meta etiketler nasıl eklenir

Çoğu zaman, sitedeki içeriği yönetmek için çeşitli CMS kullanılır ve bunlardan bazıları meta etiketleri ayarlamak için ek modüller ve eklentilerin yüklenmesini gerektirir. Meta etiketleri CMS'ye kaydetmek için şunlara ihtiyacınız vardır:


Yine de Wix ve bir CMS değildir - sadece bir kurucudur, burada ayrıca sitenin meta açıklamasını ve site hakkında bilgi içeren anahtar kelimeleri de yapabilirsiniz. Her sayfa için üç noktaya tıkladığınızda SEO bölümüne gidip gerekli parametreleri ayarlayabileceğiniz bir menü açılır.

Ancak sitenizi arama motorlarında tanıtmak konusunda ciddiyseniz, Wix kullanmamak ve örneğin aynı WordPress'i seçmek daha iyidir.

Meta etiketleri çevrimiçi kontrol etme + analiz

Kendi sitenizdeki meta etiketleri kontrol etmek için Yandex'i kullanabilirsiniz. Bunu yapmak için Web Yöneticisi'ne gidin "Tanılama - Site Tanılama". Açılan sayfada "Görüntüle" seçeneğine tıklayın. Bundan sonra, doldurulmamış sayfaların bir listesi gösterilecektir. .

Kapsamlı bir kontrol veya rakiplerden meta açıklamaları analiz etmek için, gerekli bilgileri hızlı ve çevrimiçi gösteren hizmetleri kullanabilirsiniz.

İşte bu hizmetlerden bazıları:

  • teşvik
  • Serpstat
  • piksel artı

Çözüm

Meta etiketleri, bir arama motorunun ilk dikkat ettiği şeydir. Arama sonuçlarında sitenin sayfalarını sıralamada anahtar faktörlerdir. Meta açıklamaları boş bırakamazsınız, tam tersine, onları doldururken çok dikkatli olmanız gerekiyor ve artık nasıl yapılacağını biliyorsunuz.

12 yanıt

Genel olarak konuşursak, META-INF'e kendiniz hiçbir şey koymamalısınız. Bunun yerine, JAR'ınızı paketlemek için kullandığınız şeye güvenmelisiniz. Bu, Ant'ın gerçekten üstün olduğunu düşündüğüm bir alan: JAR dosyası bildirim özniteliklerini belirlemek. Şöyle bir şey söylemek çok kolay:

En azından kolay olduğunu düşünüyorum... :-)

Buradaki nokta, META-INF'nin dahili bir Java metadizini olarak düşünülmesi gerektiğidir. Onunla uğraşma! JAR'a eklemek istediğiniz tüm dosyalar başka bir alt dizine veya JAR'ın kendisinin köküne yerleştirilmelidir.

Bazı Java kitaplıklarının META-INF'yi, JAR ile birlikte paketlenmesi ve CLASSPATH'e dahil edilmesi gereken yapılandırma dosyalarının dahil edileceği bir dizin olarak kullanmaya başladığını fark ettim. Örneğin Spring, aşağıdakileri kullanarak sınıf yolunda bulunan XML dosyalarını içe aktarmanıza izin verir:

Bu örnekte, doğrudan Apache CXF Kullanım Kılavuzundan alıntı yapıyorum. Spring üzerinden birden fazla konfigürasyon seviyesine izin vermemiz gereken üzerinde çalıştığım bir projede, bu konvansiyonu onurlandırdık ve konfigürasyon dosyalarımızı META-INF'e yerleştirdik.

Bu çözümü düşündüğümde, yapılandırma dosyalarını META-INF yerine belirli bir Java paketine dahil etmenin tam olarak neyin yanlış olacağını bilmiyorum. Ancak bu yeni fiili standart gibi görünüyor; ya o ya da yeni anti-desen :-)

Statik kaynakları da oraya yerleştirebilirsiniz.

Örnekte:

META-INF/resources/button.jpg

ve bunları web3.0 kapsayıcısında alın

http://localhost/myapp/button.jpg

/META-INF/MANIFEST.MF değerinin özel bir anlamı vardır:

Buradaki bilgilere ek olarak, bir WAR dosyası olması durumunda, META-INF/MANIFEST.MF dosyası, geliştiriciye, kapsayıcının uygulamanızın bağlı olduğu her şeyi bulmasını sağlayan bir kapsayıcı dağıtım süresi denetimi başlatma olanağı sağlar. başvurunuz. Bu, bir JAR'ı kaçırmanız durumunda, eksik olduğunu anlamak için uygulamanızın çalışma zamanına ulaşmasını beklemenize gerek kalmamasını sağlar.

Maven klasöründe META-INF Koşullu paketleme kuralıyla proje kaynaklarınızın bir JAR'daki Standart Dizin Düzeni nedeniyle anlaşılabilir: $(basedir)/src/main/resources dizinine yerleştirilen tüm dizinler veya dosyalar JAR'ınızda aynı yapı ile paketlenir. JAR tabanları ile. $(basedir)/src/main/resources/META-INF klasörü genellikle .properties dosyalarını içerir, jar ise oluşturulan dosyaları içerir. MANIFEST.MF, pom.özellikler pom.xml, diğer dosyalar arasında. Ayrıca Spring gibi çerçeveler, web kaynaklarına hizmet etmek için classpath:/META-INF/resources/ kullanır. Daha fazla bilgi için, bkz

JPA1 kullanıyorsanız, kullanmak isteyebileceğiniz kalıcılık biriminin adını belirten persistence.xml dosyasını bırakmanız gerekebilir. Kalıcılık modülü, bir grupta kalıcı hale getirilecek tüm sınıfları içeren bir dizi meta veri dosyası, sınıf ve kavanoz belirtmek için uygun bir yol sağlar.

javax.persistence.EntityManagerFactory'yi içe aktarın; javax.persistence.Persistence'ı içe aktarın; // ... EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName);

Geçenlerde bu sorunu düşündüm. META-INF kullanımında herhangi bir kısıtlama yok gibi görünüyor. Elbette oraya bir manifesto koymakla ilgili bazı kısıtlamalar var ama oraya başka şeyler koymakla ilgili herhangi bir yasak yok gibi görünüyor.

Neden böyle?

cxf davası yasal olabilir. Bu standart olmayanın, JBoss-ws'de wsdl şemasına karşı sunucu tarafı doğrulamasını önleyen kötü bir hatayı gidermek için önerildiği başka bir yer.

Ama gerçekten standartlar yok, hiçbir şey olmamalı. Genellikle bu şeyler çok katı bir şekilde tanımlanır, ancak nedense burada bir standart yok gibi görünüyor. Garip. Görünüşe göre META-INF, başka hiçbir şekilde kolayca işlenemeyen herhangi bir gerekli yapılandırma için popüler bir yer haline geldi.

Buraya bilgi eklemek için META-INF, ClassLoader'ın jar içindeki diğer klasörlerden farklı şekilde ele aldığı özel bir klasördür. META-INF içinde yuvalanmış öğeler, bunun dışındaki öğelerle karıştırılmaz. Başka bir kök gibi. En azından Enumerator yönteminde ClassLoader#getSystemResources(String path) etc.: Belirtilen yol "META-INF" ile başladığında, yöntem sınıf yolundaki tüm jar'ların META-INF klasörleri içinde yuvalanmış kaynakları arar. Ve verilen yol "META-INF" ile başlamadığında, yöntem sınıf yolundaki tüm jar ve dizinlerin diğer tüm klasörlerindeki (META-INF dışında) kaynakları arar.

Herkese selam! Android sistemiyle ilgilenenler için bu makaleyi oluşturmaya karar verdim. Android işletim sistemini yalnızca aramalar ve medya dosyalarını oynatmak için değil, diğer aygıt yazılımlarını denemek isteyenler, arayüzü tamamen değiştiren süslemeler, performansı artırmak için çeşitli ince ayarlar vb. hakları), birden fazla kez CWM kurtarma yoluyla kurulum için .zip uzantılı paketlerle karşılaştı. Bu paketlerin yapısı nedir, nasıl kurulur, böyle bir paketi kendiniz nasıl kurarsınız, cat altına bakın.

Bu konuya yeni başlayanların büyük çoğunluğu olduğundan, her şeyi kendi kelimelerimle anlatıyorum. Kurtarma için bir zip paketi, herhangi bir görevi (herhangi bir dosyayı değiştirmek, silmek, biçimlendirmek, dosya eklemek, başlatmak vb.) gerçekleştirmek için edify dilinde sözdizimi (metin) içeren bir dizi dosya, komut dosyasıdır. Paket yapısı:
Paketin içinde önce “com” klasörünü içeren “META-INF” klasörünü, ardından “google” klasörünü, ardından “android” klasörünü görüyoruz ve son olarak iki dosya görüyoruz: updater-script ve güncelleme-ikili. META-INF klasörünün bu tür "komik" içerikleri, Android işletim sistemindeki tüm kurtarma ve cihazlar için aynıdır ve yalnızca kurtarma bunu "okuyabilir". Updater-script, aşamalar halinde kurtarma için komutlar içeren bir dosyadır. Örneğin, bir metin düzenleyicide kök gezgini ile güncelleyici-komut dosyasını açın ve bakın:
mount("/system"); - komut dosyası, sistemi yazmak için bağlar
delete("/system/app/calculator.apk"); - hesap makinesi uygulamasını system/app/ klasöründen siler
umout("/system"); - sistemi kaldırır.
Bu komut dosyası, silme, kopyalama, açma vb. için herhangi bir sözdizimi içerebilir, ancak daha sonra daha fazlası. İkinci güncelleme ikili dosyası, düzenleme dilindeki bir dizi komuttur (güncelleyici komut dosyası için bir hile sayfası gibi). Ruth explorer, büyük ağırlık nedeniyle açılmıyor ve kural olarak zaten indirilmiş durumda. Ne için olduğuna bir örnek. Arşivi koyun, kurtarma, güncelleyici komut dosyasındaki ilk komuta “görünür”, örneğin mount("/system); sonra bu komut güncelleme ikili dosyasında kontrol edilir ve bu komutun sistemi yazmak için bağladığını söyler ve sistem yapar bunu META-INF klasöründe daha fazla açarken MANIFEST.MF, CERT.RSA ve CERT.SF dosyalarını görebilirsiniz.Bu arşivin imzasıdır ve sadece fabrika kurtarma için gereklidir.Ayrıca , "ana" META-INF klasörünün yanında herhangi bir klasör veya dosya olabilir.Örneğin, sistem çekirdeğini değiştirmek için bir paket: İçinde yukarıda yazdıklarımı içeren her şeyi içeren META-INF klasörünü görüyoruz (META- INF/com/google/android/updater-script ve update-binary) ve önyükleme çekirdeği görüntüsü .img Ya standart bir müzik çaların çıkarılması ve değiştirilmesi için bir paket: META-INF ve sistem klasörü ve içindekiler Örneğin, playerpro.apk dosyasını koyduğumuz uygulama klasörü.
Bir akıllı telefonda bir paketi bir araya getirmek, değiştirmek veya yeniden paketlemek için önce kök haklarına, bir ikili güncelleme dosyasına ve üç programa ihtiyacımız var: kök gezgini, zarchiver ve arşivleri imzalamak için bir program zip imzalayıcı. Gitmek! Örnekte, stok oynatıcıyı kaldıracağız ve PlayerPro'yu yerine koyacağız.
1. Kök gezgini açın ve META-INF/com/google/android/ klasörlerinden bir yol oluşturun.
2. Android klasöründe paketi açın ve update-binary dosyasını yerleştirin.
3. Ayrıca android klasöründe (Root Explorer uygulamasında) ek bir menüye tıklayın ve “dosya oluştur” üzerine dokunun. Dosya adını updater-script yazıyoruz.
4. Güncelleyici komut dosyasını aynı kök gezginin bir metin düzenleyicisinde açın ve komutları yazın:
mount("/sbin/meşgul kutusu", "/sistem");
sil("/system/app/music.apk");
package_extract_dir("sistem", "/sistem");
unmount("/sistem");
5. Çıkın ve kaydedin.
6. META-INF klasörüne adım atıyoruz ve yanında sistem klasörünü ve içinde, oynatıcımızın önceden yüklenmiş apk dosyasını koyduğumuz uygulama klasörünü oluşturuyoruz (veri / uygulama yolu boyunca alabilirsiniz) ).
7. Zarchiver programı / ayarları / zip sıkıştırma düzeyine girip "normal" seçeneğini seçiyoruz. Ardından ayarlardan çıkın ve çoklu seçime tıklayın. META-INF ve system adlı iki klasörümüzü seçiyoruz, onları bir zip arşivine paketliyoruz.
8. Zip imzalayıcı programını açın, arşivimizi bulun, istediğimiz şekilde adlandırın (yalnızca Rusça karakterler ve boşluklar olmadan, örneğin Playerpro-system-by-me), aşağıdaki imzalı test anahtarına tıklayın.
9. CWM veya diğer herhangi bir özel kurtarma yoluyla kuruluma hazır imzalı bir arşiv buluyoruz.
Updater-script için küçük bir komut örneği:
copy_dir
Sözdizimi: copy_dir []
İçeriği kopyalar içinde . Dosyalar uygun üzerine yazılır.
Örnek: copy_dir PACKAGE:system SYSTEM: Dosyaları update.zip/system klasöründen /system klasörüne kopyalayın
biçim
Sözdizimi: biçim
Bir bölümü biçimlendirir (bkz. ek)
Örnek: SİSTEMİ biçimlendir: /sistemi tamamen biçimlendirir. Not: Biçimlendirme, verileri geri alınamayacak şekilde siler.
silmek
Sözdizimi: sil [… ]
Dosyaları siler
Örnek: delete SYSTEM:app/Calculator.apk Calculator.apk'yi sistem/app klasöründen siler.
delete_recursive
Sözdizimi: delete_recursive [… ]
Tüm içeriği olan dosya ve klasörleri tekrar tekrar siler
Örnek: delete_recursive DATA:dalvik-cache /data/dalvik-cache klasörünü tüm içeriğiyle birlikte siler
Programı çalıştır
Sözdizimi: run_program [ ...]
Bir program (komut dosyası) çalıştırır.
Örnek: run_program PACKAGE:install_busybox.sh update.zip/install_busybox.sh komut dosyasını çalıştırır.
set_perm
Sözdizimi: set_perm [… ]
'chmod', 'chown' ve 'chgrp' gibi bir dosya veya klasörün sahibini, grubunu ve izinlerini bir arada ayarlar
Örnek: set_perm 0 2000 0550 SYSTEM:etc/init.goldfish.sh /system/etc/init.goldfish.sh dosyasının sahibini, grubunu ve izinlerini ayarlar
set_perm_recursive
Sözdizimi: set_perm_recursive [… ]
Bir klasörün içeriğinin sahibini, grubunu ve izinlerini yinelemeli olarak ayarlar. - klasörler için, - dosyalar için.
Örnek: set_perm_recursive 0 0 0755 0644 SYSTEM:app /system/app içeriği için izinleri ayarlayın, klasörler için - 0755, dosyalar için - 0644.
show_progress*
Sözdizimi: show_progress
Konumdaki ilerleme çubuğunu gösterir saniye (veya gerçek yürütme hızı belirlenebilirse daha hızlı).
Örnek: show_progress 0.1 0
sembolik bağlantı
Sözdizimi: sembolik bağlantı
Sembolik bir bağlantı oluşturur ('ln-s' gibi). kök:yol biçiminde yazılır ve hedef dosya sistemi biçiminde (ve göreceli olabilir)
Örnek: symlink /data/app_s SYSTEM:app /system/app klasörü için /data/app_s klasörüne sembolik bir bağlantı oluşturur
UPD: Paketi derlediyseniz ve kurtarma yoluyla flash ettiyseniz, o zaman iki seçenek vardır - ya kurarken kurtarma bir hata yazar ve hiçbir şey olmaz, silinmez. değiştirilmez (paket yapısı yanlış olduğunda, dosya/klasör adlarında herhangi bir hata olduğunda, updater-script'te yanlış (yanlış sıra veya hatalar) komutlar olduğunda veya uygun olmayan update-binary olduğunda olur. Kural olarak, kurtarma yazar 1'den 9'a kadar bir hata kodu. Ya her şey sizin belirttiğiniz gibi olacaktır. Yani, güncelleyici komut dosyasındaki komutların yarısı yürütülemez - ya hep ya hiç ve bir hata.
Umarım bu makale birileri için faydalı olmuştur. Doğal olarak bu, hemen acele edip doğru bir çalışma paketi oluşturacağınız anlamına gelmese de çalışmalarınızda size çok yardımcı olacaktır.
HERHANGİ BİR PAKET KURMADAN ÖNCE SİSTEMİN YEDEKLEMESİNİ YAPMAYI UNUTMAYINIZ. SİSTEM DOSYALARININ KALDIRILMASI VE DEĞİŞTİRİLMESİ İLE İLGİLİ TÜM İŞLEMLERDEN NE BEN VEYA SİTE YÖNETİMİ SORUMLU DEĞİLDİR.

bir klasör var (11)

Java'da genellikle bazı meta dosyaları içeren bir META-INF klasörü görürsünüz. Bu klasörün amacı nedir ve oraya ne koyabilirim?

Yanıtlar

Maven'de META-INF

Maven klasöründe META-INF standart bir JAR'daki proje kaynaklarınızla eşleşen standart bir dizin düzeni nedeniyle anlaşılabilir: bir dizine yerleştirilmiş herhangi bir dizin veya dosya $(basedir)/src/main/resources, JAR'ın tabanından başlayarak tamamen aynı yapı kullanılarak JAR'ınıza paketlenir. Dosya $(basedir)/src/main/resources/META-INF genellikle dosyalar içerir .özellikler, banka oluşturulanları içerirken MANIFEST.MF , pom.özellikler , pom.xml, diğer dosyalar arasında. Spring kullanımı classpath:/META-INF/resources/ gibi ortamlar da web kaynaklarına hizmet etmek için kullanılır. Daha fazla bilgi için, bkz

Geçenlerde bu sorunu düşündüm. META-INF kullanımında herhangi bir kısıtlama yok gibi görünüyor. Elbette oraya bir manifesto koymakla ilgili bazı kısıtlamalar var ama oraya başka şeyler koymakla ilgili herhangi bir yasak yok gibi görünüyor.

Neden böyle?

cxf davası yasal olabilir. Bu standart olmayanın, JBoss-ws'de wsdl şemasına karşı sunucu tarafı doğrulamasını önleyen kötü bir hatayı gidermek için önerildiği başka bir yer.

Ama aslında başka hiçbir standart yoktur. Genellikle bu şeyler çok katı bir şekilde tanımlanır, ancak nedense burada bir standart yok gibi görünüyor. Garip. Görünüşe göre META-INF, başka hiçbir şekilde kolayca işlenemeyen herhangi bir gerekli yapılandırma için popüler bir yer haline geldi.

Buradaki bilgilere eklemek için, bir WAR dosyası olması durumunda, META-INF/MANIFEST.MF dosyası geliştiriciye kapsayıcı tarafından bir dağıtım süresi denetimi başlatma yeteneği sağlar, bu da kapsayıcının tüm sınıfları bulmasını sağlar uygulamanıza bağlıdır. Bu, bir JAR'ı kaçırmanız durumunda, eksik olduğunu anlamak için uygulamanızın çalışma zamanına ulaşmasını beklemenize gerek kalmamasını sağlar.

Genel olarak konuşursak, META-INF'e kendiniz hiçbir şey girmemelisiniz. Bunun yerine, JAR'ınızı paketlemek için kullandığınız şeye güvenmelisiniz. Bu, Ant'ın gerçekten üstün olduğunu düşündüğüm bir alan: JAR dosyası bildirim özniteliklerini belirlemek. Şöyle bir şey söylemek çok kolay:

En azından kolay olduğunu düşünüyorum... :-)

Mesele şu ki, META-INF dahili olarak düşünülmelidir. metadizin Java. Onunla uğraşma! JAR'a eklemek istediğiniz tüm dosyalar başka bir alt dizine veya JAR'ın kendisinin köküne yerleştirilmelidir.

Tüm cevaplar doğru. Meta-inf'in birçok amacı vardır. Ayrıca, burada Tomcat kapsayıcısını kullanan bir örnek var.

/META-INF/MANIFEST.MF değerinin özel bir anlamı vardır:

  1. Kavanozu Java -jar myjar.jar org.myserver.MyMainClass ile çalıştırırsanız, ana sınıf tanımını jar içine taşıyabilirsiniz, böylece çağrıyı Java -jar myjar.jar içine sıkıştırabilirsiniz.
  2. Java.lang.Package.getPackage("org.myserver").getImplementationTitle() kullanıyorsanız, paketler için Metainformations tanımlayabilirsiniz.
  3. Applet/Webstart modunda kullanmak istediğiniz dijital sertifikalara bağlantı verebilirsiniz.

JPA1 kullanıyorsanız, kullanmak isteyebileceğiniz kalıcılık birimi adını belirten persistence.xml dosyasını kaldırmanız gerekebilir. Kalıcılık modülü, bir grupta kalıcı hale getirilecek tüm sınıfları içeren bir dizi meta veri dosyası, sınıf ve kavanoz belirtmek için uygun bir yol sağlar.

javax.persistence.EntityManagerFactory'yi içe aktarın; javax.persistence.Persistence'ı içe aktarın; // ... EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName);

Buradaki bilgilere ek olarak META-INF, ClassLoader'ın jar içindeki diğer klasörlerden farklı olarak ele aldığı özel bir klasördür. META-INF klasöründe yuvalanmış öğeler, bunun dışındaki öğelerle karıştırılmaz.

Başka bir kök gibi düşünün. Numaralandırıcı yönteminden ClassLoader#getSystemResources(Dize yolu) yöntemi Numaralandırıcı ClassLoader#getSystemResources(Dize yolu) ve diğer bakış açıları:

Verilen yol "META-INF" ile başladığında, yöntem, sınıf yolundaki tüm kavanozların META-INF klasörleri içinde yuvalanmış kaynakları arar.

Belirtilen yol "META-INF" ile başlamadığında, yöntem sınıf yolundaki tüm jar ve dizinlerin diğer tüm klasörlerindeki (META-INF dışında) kaynakları arar.

getSystemResources yöntemi olan başka bir klasör adı biliyorsanız, yorumlayın.

META-INF klasörü, MANIFEST.MF dosyasının evidir. Bu dosya, JAR'ın içeriği hakkında meta veriler içerir. Örneğin, yürütülebilir JAR'lar için statik bir main() ile Java sınıfının adını belirten Main-Class adında bir giriş vardır.

Resmi JAR dosya spesifikasyonundan (bağlantı Java 7 sürümüne gider, ancak metin en az v1.3'ten beri değişmedi):

META-INF kataloğu

META-INF dizinindeki aşağıdaki dosyalar/dizinler uygulamaları, uzantıları, sınıf yükleyicileri ve hizmetleri yapılandırmak için Java 2 platformu tarafından tanınır ve yorumlanır:

  • MANIFEST.MF

Uzantı ve paketle ilgili verileri tanımlamak için kullanılan bir bildirim dosyası.

  • İNDEKS.LİSTESİ

Bu dosya, uygulamada veya uzantıda tanımlanan paketler için konum bilgilerini içeren jar aracının yeni -i seçeneği tarafından oluşturulur. JarIndex uygulamasının bir parçasıdır ve sınıf yükleme sürecini hızlandırmak için sınıf yükleyiciler tarafından kullanılır.

JAR dosyası için imza dosyası. "x", temel dosyanın adı anlamına gelir.

  • x.DSA

Aynı temel dosya adına sahip bir imza dosyasıyla ilişkili bir imza blok dosyası. Bu dosya, ilgili imza dosyasının dijital imzasını saklar.

  • Hizmetler/

Bu dizin, tüm servis sağlayıcı yapılandırma dosyalarını depolar.

Bu bir yol.

hashmap h = yeni HashMap () (( put("a","b"); ));

Ancak dikkatli olmalı ve yukarıdaki kodu anladığınızdan emin olmalısınız (HashMap'ten miras alan yeni bir sınıf oluşturur). Bu yüzden burada daha fazlasını okumalısınız: http://www.c2.com/cgi/wiki?DoubleBraceInitialization veya sadece Guava kullanın:

Harita sol = ImmutableMap.of("a", 1, "b", 2, "c", 3);

bellenim hizmetleri (11)

JPA1 kullanıyorsanız, kullanmak isteyebileceğiniz kalıcılık birimi adını belirten persistence.xml dosyasını kaldırmanız gerekebilir. Kalıcılık modülü, bir grupta kalıcı hale getirilecek tüm sınıfları içeren bir dizi meta veri dosyası, sınıf ve kavanoz belirtmek için uygun bir yol sağlar.

javax.persistence.EntityManagerFactory'yi içe aktarın; javax.persistence.Persistence'ı içe aktarın; // ... EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName);

Java'da genellikle bazı meta dosyaları içeren bir META-INF klasörü görürsünüz. Bu klasörün amacı nedir ve oraya ne koyabilirim?

Statik kaynakları da oraya yerleştirebilirsiniz.

Örnekte:

META-INF/resources/button.jpg

ve bunları web3.0 kapsayıcısında

http://localhost/myapp/button.jpg

/META-INF/MANIFEST.MF değerinin özel bir anlamı vardır:

  1. Kavanozu Java -jar myjar.jar org.myserver.MyMainClass ile çalıştırırsanız, ana sınıf tanımını jar içine taşıyabilirsiniz, böylece çağrıyı Java -jar myjar.jar içine sıkıştırabilirsiniz.
  2. Java.lang.Package.getPackage("org.myserver").getImplementationTitle() kullanıyorsanız, paketler için Metainformations tanımlayabilirsiniz.
  3. Applet/Webstart modunda kullanmak istediğiniz dijital sertifikalara bağlantı verebilirsiniz.

Geçenlerde bu sorunu düşündüm. META-INF kullanımında herhangi bir kısıtlama yok gibi görünüyor. Elbette oraya bir manifesto koymakla ilgili bazı kısıtlamalar var ama oraya başka şeyler koymakla ilgili herhangi bir yasak yok gibi görünüyor.

Neden böyle?

cxf davası yasal olabilir. Bu standart olmayanın, JBoss-ws'de wsdl şemasına karşı sunucu tarafı doğrulamasını önleyen kötü bir hatayı gidermek için önerildiği başka bir yer.

Ama aslında başka hiçbir standart yoktur. Genellikle bu şeyler çok katı bir şekilde tanımlanır, ancak nedense burada bir standart yok gibi görünüyor. Garip. Görünüşe göre META-INF, başka hiçbir şekilde kolayca işlenemeyen herhangi bir gerekli yapılandırma için popüler bir yer haline geldi.

Genel olarak konuşursak, META-INF'e kendiniz hiçbir şey girmemelisiniz. Bunun yerine, JAR'ınızı paketlemek için kullandığınız şeye güvenmelisiniz. Bu, Ant'ın gerçekten üstün olduğunu düşündüğüm bir alan: JAR dosyası bildirim özniteliklerini belirlemek. Şöyle bir şey söylemek çok kolay:

En azından kolay olduğunu düşünüyorum... :-)

Mesele şu ki, META-INF dahili olarak düşünülmelidir. metadizin Java. Onunla uğraşma! JAR'a eklemek istediğiniz tüm dosyalar başka bir alt dizine veya JAR'ın kendisinin köküne yerleştirilmelidir.

META-INF klasörü, MANIFEST.MF dosyasının evidir. Bu dosya, JAR'ın içeriği hakkında meta veriler içerir. Örneğin, yürütülebilir JAR'lar için statik bir main() ile Java sınıfının adını belirten Main-Class adında bir giriş vardır.

Maven'de META-INF

Maven klasöründe META-INF standart bir JAR'daki proje kaynaklarınızla eşleşen standart bir dizin düzeni nedeniyle anlaşılabilir: bir dizine yerleştirilmiş herhangi bir dizin veya dosya $(basedir)/src/main/resources, JAR'ın tabanından başlayarak tamamen aynı yapı kullanılarak JAR'ınıza paketlenir. Dosya $(basedir)/src/main/resources/META-INF genellikle dosyalar içerir .özellikler, banka oluşturulanları içerirken MANIFEST.MF , pom.özellikler , pom.xml, diğer dosyalar arasında. Spring kullanımı classpath:/META-INF/resources/ gibi ortamlar da web kaynaklarına hizmet etmek için kullanılır. Daha fazla bilgi için, bkz

Buradaki bilgilere ek olarak META-INF, ClassLoader'ın jar içindeki diğer klasörlerden farklı olarak ele aldığı özel bir klasördür. META-INF klasöründe yuvalanmış öğeler, bunun dışındaki öğelerle karıştırılmaz.

Başka bir kök gibi düşünün. Numaralandırıcı yönteminden ClassLoader#getSystemResources(Dize yolu) yöntemi Numaralandırıcı ClassLoader#getSystemResources(Dize yolu) ve diğer bakış açıları:

Verilen yol "META-INF" ile başladığında, yöntem, sınıf yolundaki tüm kavanozların META-INF klasörleri içinde yuvalanmış kaynakları arar.

Belirtilen yol "META-INF" ile başlamadığında, yöntem sınıf yolundaki tüm jar ve dizinlerin diğer tüm klasörlerindeki (META-INF dışında) kaynakları arar.

getSystemResources yöntemi olan başka bir klasör adı biliyorsanız, yorumlayın.

Tüm cevaplar doğru. Meta-inf'in birçok amacı vardır. Ayrıca, burada Tomcat kapsayıcısını kullanan bir örnek var.

Tomcat Doc'a gidin ve Yüklemek bağlanmak " Standart uygulama > copyXML ».

Açıklama aşağıdadır.

Uygulama dağıtıldığında, uygulama içinde gömülü bağlam XML tanımlayıcısının (/META-INF/context.xml içinde bulunur) ana bilgisayar sahibinin xmlBase'ine kopyalanmasını istiyorsanız true olarak ayarlayın. Sonraki çalıştırmalarda, uygulamaya gömülü açıklayıcı daha yeni olsa bile, kopyalanan bağlam XML tanımlayıcısı, uygulamaya gömülü herhangi bir bağlam XML tanımlayıcısına tercihli olarak kullanılacaktır. Bayrağın varsayılan değeri yanlıştır. Ana bilgisayar sahibinin dağıtımXML ​​özniteliği yanlışsa veya ana bilgisayar sahibinin copyXML özniteliği doğruysa, bu özniteliğin hiçbir etkisi olmayacağını unutmayın.

Resmi JAR dosya spesifikasyonundan (bağlantı Java 7 sürümüne gider, ancak metin en az v1.3'ten beri değişmedi):

META-INF kataloğu

META-INF dizinindeki aşağıdaki dosyalar/dizinler uygulamaları, uzantıları, sınıf yükleyicileri ve hizmetleri yapılandırmak için Java 2 platformu tarafından tanınır ve yorumlanır:

  • MANIFEST.MF

Uzantı ve paketle ilgili verileri tanımlamak için kullanılan bir bildirim dosyası.

  • İNDEKS.LİSTESİ

Bu dosya, uygulamada veya uzantıda tanımlanan paketler için konum bilgilerini içeren jar aracının yeni -i seçeneği tarafından oluşturulur. JarIndex uygulamasının bir parçasıdır ve sınıf yükleme sürecini hızlandırmak için sınıf yükleyiciler tarafından kullanılır.

JAR dosyası için imza dosyası. "x", temel dosyanın adı anlamına gelir.

  • x.DSA

Aynı temel dosya adına sahip bir imza dosyasıyla ilişkili bir imza blok dosyası. Bu dosya, ilgili imza dosyasının dijital imzasını saklar.

  • Hizmetler/

Bu dizin, tüm servis sağlayıcı yapılandırma dosyalarını depolar.

META-INF klasörünüzün içinde bir MANIFEST.MF dosyanız var. Yapabilirsiniz için ek veya dış bağımlılıkları tanımlayın erişime sahip olmanız gerekir.

Örnek:

Uygulamanızı dağıttığınızı ve kapsayıcınızın (çalışma zamanı sırasında) uygulamanızın lib klasöründe olmayan bir kitaplığın daha yeni bir sürümüne ihtiyacı olduğunu bulduğunu düşünün, bu durumda MANIFEST.MF'de ek bir yeni sürüm tanımladıysanız, uygulamanız oradan bağımlılığa başvuracak (ve çökmeyecek).

Kaynak: Head First Jsp & Servlet

İşte Şubat 2015 itibariyle kod çözücülerin bir listesi.