Java uygulamalarını dağıtmanın en iyi yolu nedir? [kapalı]


115

Java, tercih ettiğim programlama dillerinden biridir. Uygulamamı son kullanıcılara dağıtmakla birlikte her zaman sorunla karşılaşıyorum.

Bir kullanıcıya bir JAR vermek her zaman istediğim kadar kullanıcı dostu değildir ve Java WebStart'ı kullanmak bir web sunucusu kullanmamı gerektirir.

Bir Java uygulamasını dağıtmanın en iyi yolu nedir? Java uygulamasının kullanıcının bilgisayarına yapıları yüklemesi gerekiyorsa ne olur? Piyasada iyi bir Java yükleme / paketleme sistemi var mı?


Java WebStart, CD veya ağ sürücüsü gibi bir dosya sistemi gibi herhangi bir URL'de kullanılabilir. Sana o kadar vermediğine izin ver. Not: eclipse bir yükleyici kullanmaz, sadece paketini açıp çalıştırırsınız. Belki bir yükleyiciye ihtiyacınız yoktur.
Peter Lawrey

1
Bugünlerde böyle bir Java WebStart uygulamasını örneğin Google Application Engine'e dağıtmak çok basit.
Thorbjørn Ravn Andersen

6
Bu sorunun kapalı olması çok yazık. 'Öncelikle fikir temelli' olarak belirtilen nedene katılmıyorum. Verilen cevaplar fikre değil deneyime dayanmaktadır. Deneyime dayalı iyi yanıtları her zaman beklerim. Tarihten öğrenemeyenler onu tekrar etmeye mahkumdur.
bouvierr

Java Uygulamalarını dağıtmak için jlink'i (JDK 9 ile tanıtılan) kullanabilirsiniz. JDK ile birlikte gelir. Size özel bir JRE oluşturacaktır. İstemci makinelere java yüklemenize gerek yoktur.
blueray

Yanıtlar:


89

Dağıtım gereksinimlerinize bağlı olarak çeşitli çözümler vardır.

  1. Sadece bir kavanoz kullanın. Bu, kullanıcının doğru java sürümünün kurulu olduğunu varsayar, aksi takdirde kullanıcı "sınıf-dosya biçimi sürümü" istisnaları alır. Bu, bir şirket içindeki dahili dağıtım için uygundur.

  2. Launch4j ve NSIS gibi bir yükleyici kullanın. Kullanıcı java çalışma zamanını kaldırmak gibi aptalca şeyler yapabilse de, bu size çok daha fazla kontrol sağlar. Bu muhtemelen en popüler yaklaşım ve şu anda kullandığım şey.

  3. Web başlangıcı kullanın. Bu aynı zamanda kullanıcının doğru java sürümünün kurulu olduğunu varsayar, ancak başlamak çok daha kolaydır. Tecrübelerime göre, bu sıkı bir şekilde kontrol edilen intranet ortamları için iyidir, ancak bazı garip başarısızlıkları olduğu için daha büyük dağıtımlarda bir sorun haline gelir. Java 1.7'deki yeni eklenti teknolojisi ile daha iyi hale gelebilir.

  4. Excelsior JET gibi bir yerel kod derleyicisi kullanın ve yürütülebilir olarak dağıtın veya bir yükleyicide toplayın. Pahalıdır ve genellikle sizi java'nın biraz daha eski bir sürümüne bağlar ve dinamik sınıf yüklemesinde biraz sıkıntı vardır, ancak destek zorluklarınızı en aza indirmeniz gereken büyük ölçekli dağıtım için çok etkilidir.


4
Webstart ile ilgili bir not: Kullanıcının taş devrine ait olmayan bir Java sürümü yüklü olduğu sürece (örn. 1.2) webstart, programınız için gerekli olanın daha yeni bir Java sürümünü indirip yüklemesi söylenebilir. hala. .Jnlp dosyası söz dizimine bakın. Elbette, uğraştığınız müşterilere bağlı olarak uygun olmayan Java kullandığınızı hala oldukça belirgin bir şekilde gösteriyor. Bu gibi durumlarda, gerçekten de bir tür "yerel" yükleyici / dosya biçimi kullanmanız ve uygulama ayrıntılarını olabildiğince gizlemeniz gerekir.
Daniel Schneller

10
Webstart'ı sevmiyorum. Çok fazla Java / Sun markası var. Doğru çalışmasını sağlamak zor. Kod imzalamayı ayarlamak, değerinden daha zahmetlidir ve kullanıcı yine de güvenlik avantajlarını ve mesajlarını anlamaz. Kullanıcı sisteminde herhangi bir şey yapmak istiyorsanız, korkutucu uyarılardan kurtulmak için kod imzalama sertifikanız için ödeme yapmanız gerekecektir. Sorunlara neden olabilecek çok sayıda karmaşık önbellekleme yapar. Belki OSGi veya gelecek Java modülleri benzer otomatik güncelleme avantajları sunacaktır. # 2'nin bir varyasyonunu kullanıyorum ve tümü Ant'tan Mac için DMG / Packager oluşturuyorum.
Cal

NSIS'i önerdiğiniz gibi kullandım. Launch4j'ye de baktım. Neden ikisini birden kullanmanızı tavsiye ediyorsunuz?
jacknad

1
@JackN NSIS bir yükleyici üreticisidir. Launch4j, özellikle java programlarını başlatmayı / başlatmayı kolaylaştırmak içindir. İşlevlerinde bazı örtüşmeler vardır, ancak bunlar sorunun farklı bölümlerini hedef alır.
Noel Grandin

+1 harika yanıt. Excelsior JET ile herhangi bir deneyiminiz var mı? Yalnızca x86 mimarisini destekliyor mu ve gerçek zamanlı jar kitaplığını yükleyemiyor mu?
KJW

6

gelişmiş yükleyici , java uygulamalarını Windows yürütülebilir dosyaları olarak paketlemeyi kolaylaştırır ve kurabileceğiniz şekilde oldukça esnektir. Java uygulamalarını Windows istemcilerine dağıtmanın en kolay yolu olduğunu buldum.


5

JSmooth , jar'ınızı alıp standart bir Windows çalıştırılabilir dosyasında saran basit bir programdır. Gerekli JVM'yi yapılandırmanıza, uygulama ile paketlemenize veya önceden kurulu değilse indirme seçeneği sunmanıza izin veren basit bir GUI ile birlikte gelir. Exe dosyasını olduğu gibi gönderebilir veya olası bağımlılıklarla sıkıştırabilirsiniz (veya programın başlangıçta ekstra bağımlılıkları ağdan indirmesine izin verebilirsiniz). Aynı zamanda bira ve konuşmada olduğu gibi ücretsizdir, bu iyi bir şey olabilir (veya olmayabilir).


4

Hedef kullanıcılarınızın ne kadar gelişmiş olduğuna bağlıdır. Çoğu durumda, onları Java tabanlı bir uygulama çalıştırdığınız gerçeğinden ayırmak istersiniz. Onlara doğru şeyi yapan (başlangıç ​​menüsü girişleri, başlatıcılar, program ekle / kaldır ile kayıt olma, vb.) Ve zaten bir Java çalışma zamanını paketleyen (böylece kullanıcının bunu bilmesine veya önemsemesine gerek kalmadan) yerel bir yükleyici verin. Çapraz platform kurulum aracımızı önermek isterim, BitRock InstallBuilder'ı. Java tabanlı olmasa da, genellikle Java uygulamalarını paketlemek için kullanılır. Ant ile kolayca entegre edilebilir ve Windows yükleyicileri Unix / Linux / Mac'ten ve diğer yollardan oluşturabilirsiniz. Oluşturulan yükleyiciler yerel olduğundan, hedef sistemde kendi kendine çıkarma adımı veya JRE'nin bulunmasını gerektirmez, bu da daha küçük kurulumcular anlamına gelir ve sizi bazı baş ağrılarından kurtarır. Açık kaynaklı projeler için ücretsiz lisanslarımız olduğunu da belirtmek isterim.



3

Gerçek bir GUI'ye sahip son kullanıcı uygulamasıysa, programı (Java) yazdığınız dili göz ardı etmeli ve seçtiğiniz platformların her biri için yerel bir yükleyici kullanmalısınız. Mac kullanıcıları bir .dmg ister ve Windows'ta bir .msi veya bir .exe yükleyici gitmenin yoludur. Windows'ta NullSoft'tan NSIS'i tercih ediyorum çünkü InstallShield veya InstallAnywhere'den daha az sakıncalı. OSX'te JVM'nin zaten orada olduğuna güvenebilirsiniz. Windows'ta gerekirse onlar için kontrol etmeniz ve yüklemeniz gerekir. Linux kullanıcıları Java GUI uygulamalarını çalıştırmazlar ve çok az kişi çalıştırılabilir bir .jar ile ne yapacaklarını bilir.


3
Gerçekten mi? linux kullanıcıları gui uygulamalarını çalıştırmayacak mı? o zaman sanırım programı tüm tartışmayı tartışmaya açarak onlar için işe yaramaz.
Matt

@Matt neden orijinal uygulamanın bir GUI uygulaması olduğunu varsayıyorsunuz? Linux'a birçok komut satırı java uygulaması yükledim ve .deb veya .rpms olarak gelenler özellikle takdir ediliyor.
Ry4an Brase

1
Orijinal başlık GUI dedi. Ayrıca, web başlangıcı gündeme getirildiyse, iyi bir bahis, bir gui uygulamasıdır. Son olarak, linux kullanıcılarının GUI uygulamalarını kullanmadıklarını söylemek tamamen yanlıştır.
Matt

Linux kullanıcılarının GUI uygulamalarını çalıştırmadığını söylemedim. "Java GUI" uygulamalarını çalıştırmayacaklarını söyledim ve NetBeans ve Eclipse dışında ("bir kaç kişi çalıştırılabilir bir kavanozla ne yapacağını bilecek" başlığı altında ele aldığım) Linux'ta Java uygulaması (Open Office vb. C ++ 'dır ve yalnızca eklentiler için Java kullanır).
Ry4an Brase

SQLDeveloper'ı hiç duydunuz mu? Veya oracle yönetim araçlarından herhangi biri? Hepsi java ile kodlanmış (sqldeveloper sonunda .exe olarak paketlenmiş olsa da, java)
Matt

3

NSIS'i (Nullsoft Scriptable Installer System) kendim kullanmamış olsam da, gerekli JRE'nin hedef sistemde kurulu olup olmadığını kontrol edecek yükleme komut dosyaları var.

Kod Örnekleri ve Real World Installers sayfalarında birçok örnek komut dosyası mevcuttur , örneğin:

(Lütfen hiçbir komut dosyasını kullanmadığımı unutmayın, bu yüzden lütfen bunu bir onay olarak kabul etmeyin.)



1

Basit Java uygulamaları için Jar's kullanmayı seviyorum. Bir kullanıcının tıklayabileceği (Windows) bir dosyayı dağıtmak çok basittir veya

java -jar jarname.jar

IMHO, kavanoz, basitliğin ana gereklilik olduğu zaman gitmenin yoludur.


Bunu yeni başlayanlarda deneyin ve işe yaramayacağını göreceksiniz.
rhody

1

Eclipse RCP uygulamaları geliştiriyorum. Normalde bir tutulma uygulamasını başlatmak için çalıştırılabilir bir başlatıcı bulunur. Doğru java sürümünün kullanılmasını sağlamak için java sanal makineyi uygulama klasörünün içine / jre alt dizinine dahil ediyorum.

Ardından, kullanıcının makinesine kurulum için Inno Setup ile paketliyoruz.


1

Bir Java uygulamasını dağıtmanın en iyi yolu nedir? Java uygulamasının kullanıcının bilgisayarına yapıları yüklemesi gerekiyorsa ne olur? Piyasada iyi bir Java yükleme / paketleme sistemi var mı?

Deneyimlerime göre ( bir dizi seçeneği değerlendirerek ), install4j iyi bir çözümdür. Herhangi bir platform için yerel yükleyiciler oluşturur ve özellikle Java uygulamalarını yüklemeye yöneliktir. Ayrıntılar için bkz. " Özellikler için web sitesindeki " .

install4j ticari bir araçtır. Özellikle ihtiyaçlarınız nispeten basitse (sadece bir uygulamayı dağıtın ve bazı yapıları yükleyin), ücretsiz olanlar da dahil olmak üzere başka birçok iyi seçenek mevcuttur ( izPack veya daha önce bahsedilen Lauch4j gibi ). Ama en iyi yolu istediniz ve şu anki bilgilerime göre install4j, özellikle daha büyük veya daha karmaşık Java (EE) uygulamalarını dağıtmak için olanı.


Mac OS'de JVM 5.0'ı çalıştırmaya nasıl zorlayacağınızı biliyor musunuz? Windows ile sadece JRE'yi paketlersiniz, ancak Mac'te yapılandırılmış başka bir varsayılan JVM'ye sahip olmaları mümkündür. Bu yüzden, onu istediğiniz JVM sürümünü açıkça kullanmaya nasıl zorlayacağımı bilmiyorum ...
Stephane Grenier

@Stephane, aslında install4j kullanarak OS X yükleyicileri oluşturmadım, ancak sahip olduğu esnek JRE paketleme / algılama seçenekleri göz önüne alındığında bir sorun olmayacağını düşünüyorum. Onlar hakkında daha fazla bilgi için, bu cevaptaki bağlantıları kontrol edin: stackoverflow.com/questions/995881/…
Jonik

Mac, Java uygulama paketleri oluşturmayı desteklediğinden, JRE'yi info.plist içinde belirtebilirsiniz ... <key> JVMVersion </key> <string> 1.5+ </string> Belirli bir sürüm gerektirmek için artı işaretini kaldırabilirsiniz . Ben böyle yaparım ama install4j kullanmıyorum. Web'de Mac Uygulama araçları oluşturmayı açıklayan bir dizi sayfa var. Ayrıca, limewire veya vuze'un (java uygulamaları) bunu nasıl yaptığına bakmanızı tavsiye ederim. Açık kaynaklı olduklarından, uygulama paketlerini ve dmg dosyalarını oluşturmak için kullandıkları derleme komut dosyalarına da bakabilirsiniz!
Cal

0

En iyi cevap platforma bağlıdır. Windows üzerinde dağıtım için, tek kavanoz ve launch4j kombinasyonunu kullanarak iyi sonuçlar aldım . Yapım ortamımı düzgün bir şekilde kurmak biraz zaman aldı (çoğunlukla karınca komut dosyaları) ama şimdi oldukça acısız.


0

Benim bakış açıma göre, üstün dağıtım mekanizması ClickOnce veya WebStart teknolojisi gibi bir şey kullanmaktır . Yalnızca sürümü sunucuya dağıtırsınız ve sürüm yayınlandığında otomatik olarak istemcilere gönderilir. Ayrıca Eclipse RCP platformu, WebStart'ın yaptığını ve daha fazlasını yapan UpdateManager içerir.

Maven2'yi inşa etmek için kullandığım için, dağıtım sadece çocuk oyuncağı: yerleşik kavanozu sunucudaki konuma kopyalayın, gerekirse jnlp dosyasını güncelleyin ve bitirdiniz.



-2

Jar dosyasını diğer bağımlı kavanozlar, yapılandırma dosyaları ve belgelerle birlikte bir run.bat / run.sh ile birlikte sıkıştırırdım. Son kullanıcı bunu herhangi bir konuma açabilmeli ve gerekirse run.bat dosyasını düzenleyebilmelidir (çoğu durumda düzenlemeden çalıştırılmalıdır). Başlat menüsünde, masaüstünde, sistem tepsisinde vb. Girişler oluşturmak istiyorsanız bir yükleyici faydalı olabilir.

Bir kullanıcı olarak sıkıştırmayı açmayı ve yükleme türünü çalıştırmayı tercih ederim (lütfen başlangıç ​​menüsü girişi yapmayın). Ancak BT sektörünün dışındaki kişilerin farklı tercihleri ​​olabilir. Dolayısıyla, uygulama büyük ölçüde geliştiricilere yönelikse zip-run.bat rotası ve genel kullanıma yönelik uygulamalar bir yükleyici kullanılarak yüklenebilir.


Bu asla yeni başlayanlar için işe yaramayacak.
rhody
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.