kavanoz yüklenmemiş. Bkz. Servlet Spec 2.3, bölüm 9.7.2. Sorunlu sınıf: javax / servlet / Servlet.class


100

Aynı zamanda dinamik bir web projesi olan bir Maven projesi yürütüyorum. Maven'deki tüm Bahar kütüphanelerini kullandım. Oluşturdum web.xml, ancak Tomcat 7 sunucumu başlattığımda aşağıdaki mesajı alıyorum:

INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\WEB-INF\lib\
servlet-api-2.4.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

Sunucu uygulamasını silmeyi denedim webapp/libama işe yaramadı. Benim durumumda ne yapılması gerektiğini bana bildirin.


Bu davranışın sunucu uygulaması belirtimine göre olduğunu unutmayın. Tam bir anlayış, karşılaşabileceğiniz daha zor sorunları anlamanıza yardımcı olur.
Thorbjørn Ravn Andersen

Yanıtlar:


113

Sunucu uygulamacığı API .jar dosyası, açık bir şekilde, kapsayıcı kendi sınıf yolunda bu sınıflara sahip olduğundan, bu kavanozun içerdiği arabirimleri uyguladığından, web uygulamasının içine gömülmemelidir.

Bağımlılık , Maven pom'unuzda providedvarsayılan compilekapsam yerine kapsam içinde olmalıdır :

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

"Bağımlılık, Maven pom'unuzda varsayılan derleme kapsamı yerine sağlanan kapsamda olmalıdır." Bunu nasıl yapabilirim
dreambigcoder

Düzenlenmiş cevabıma bakın. Maven kullanarak uygulamayı temizleyin ve oluşturun ve sunucu uygulamasının oluşturulan web uygulamasında WEB-INF / lib dizininde olmadığını kontrol edin.
JB Nizet

Ben her şeyi yaptım. yine de kavanozu WEB-INF / lib dizininde buluyorum. Kavanozu çıkarırsam aşağıdaki mesajı alıyorum: BİLGİ: Servlet Motorunu Başlatıyor: Apache Tomcat / 7.0.12 Yapmam gereken herhangi bir şey var mı?
dreambigcoder

6
Belki başka bir sunucu uygulaması jar sürümüne geçişli bağımlılığı olan bir bağımlılığınız vardır. Bu sunucu uygulamasının nereden geldiğini bulmak için mvn bağımlılığı: ağaç kullanın ve bir dışlama ekleyin.
JB Nizet

aynısını sarmaşık için nasıl yaparım?
Dinesh Babu KG

21

Servlet api jar dosyası konteynere zaten yüklendiğinde ve dizinden tekrar yüklemeye çalıştığınızda bu uyarı mesajını alırsınız lib.

Servlet özellikleri , webapps dizininizde servlet.jar dosyasına sahip olmanıza izin verilmediğini söylüyor lib.

  • Basitçe çıkararak uyarı mesajı kurtulun servlet.jarsizin dan libdizine.
  • Kavanozu libdizinde bulamazsanız, oluşturma yolunuzu tarayın ve kavanozu kaldırın.

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\project\WEB-INF\lib

Bir maven projesi çalıştırıyorsanız , kapsayıcı zaten kendi içinde sunucu uygulaması kavanozu sağladığından, pom.xml dosyanızdaki javax.servlet-apibağımlılığı kapsam providedolarak değiştirin .


4

Bunu düzeltmek için, set kapsamını için sağlanan . Bu, Maven'e servlet-api.jar kodunu yalnızca derlemek ve test etmek için kullanmasını söyler, ancak onu WAR dosyasına dahil ETMEZ. Konuşlandırılan kapsayıcı, çalışma zamanında servlet-api.jar dosyasını "sağlayacaktır".

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>

2

Soruna neden olan jar dosyasının izlenmesinde aşağıdaki Windows komut satırını yararlı bulabilirsiniz. klasördeki tüm kavanozlardaki tüm sınıf dosyalarının bir dizinini oluşturur. Konuşlandırılan uygulamanızın lib klasöründen çalıştırın, ardından sorun teşkil eden sınıf için index.txt dosyasında arama yapın.

for /r %X in (*.jar) do (echo %X & jar -tf %X) >> index.txt

2

Maven Bağımlılık Kapsamı

sağlanan : Bu çok derleme gibi, ancak işaret bekliyoruz JDK veya konteyner zamanında bağımlılık sağlamaktır. Java Enterprise Edition için bir web uygulaması oluştururken Örneğin, size bağımlılık kuracak Servlet API ve kapsam Java EE API'ler ilgili sağlanan çünkü web konteyner bu sınıfları sağlar . Bu kapsam yalnızca derleme ve test sınıf yolunda mevcuttur ve geçişli değildir.


1

Bu sorunla uğraşıyorum ve çok sayıda "çözüm" denedim.

Bununla birlikte, sonunda, işe yarayan tek kişi ve bunu yapması birkaç saniye sürdü: yeni sunucu örneğini silmek ve geri eklemek !

Temel olarak Eclipse'de Sunucular altında Tomcat sunucuma sağ tıklayıp sildim. Ardından, yeni bir Tomcat sunucusu ekledim. Uygulamayı temizledim ve yeniden konuşlandırdım ve bu hatadan kurtuldum.


Sunucunuza sağ tıklayın -> Temizle ... ve sonra tekrar sunucunuza sağ tıklayın -> tomcat çalışma dizinini
temizle

0

El-api.jar: C: \ apache-tomcat-7.0.39 \ lib \ el-api.jar jar dosyası için Aşağıdaki Dizinin İçini Kontrol Edin web uygulamanızın WEB-INF \ lib \ dizininde varsa el-api.jar kavanoz çıkarılmalıdır


0

URL modeliniz yanlış olduğunda bu hata meydana gelebilir.

Örneğin. @WebServlet ("giriş") yazdıysanız, bu hata gösterilecektir. Doğru olan @WebServlet ("/ login").


0

İstisnalar ve providedbağımlılıklar alt projelerde çalışmayacaktır.

Maven projelerinde miras kullanıyorsanız , bu yapılandırmayı üst dosyaya eklemelisinizpom.xml . Kalıtım kullanıyorsanız<parent>...</parent> , pom.xml'nizde bir bölümünüz olacaktır . Yani ebeveyninizde buna benzer bir şey olacak :pom.xml

<groupId>some.groupId</groupId>
<version>1.0</version>
<artifactId>someArtifactId</artifactId>
<packaging>pom</packaging>
<modules>
    <module>child-module-1</module>
    <module>child-module-2</module>
</modules>
<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

0

JAX-WS bağımlılık kitaplığı “jaxws-rt.jar” eksik.

Http://jax-ws.java.net/ adresine gidin . JAX-WS RI dağıtımını indirin. Sıkıştırılmış dosyayı açın ve “jaxws-rt.jar” dosyasını Tomcat kitaplık klasörü “{$ TOMCAT} / lib” içine kopyalayın. Tomcat'i yeniden başlatın.


0

Genellikle bu mesajı gördüğünüzde zararsızdır. Diyorsa

INFO: validateJarFile(/<webapp>/WEB-INF/lib/servlet-api-2.5.jar) - jar not loaded. 
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

Bu, servlet-api-2.5.jar dosyanızı görmezden geldiği anlamına gelir çünkü tomcat zaten bu kavanozun yerleşik bir sürümüne sahiptir, bu nedenle sizinki kullanmayacaktır. Genellikle bu bir soruna neden olmaz.

Ancak diyorsa WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class

o zaman yapabileceğin şey (benim örneğimde, gölgeli bir kavanoz)

$ mvn bağımlılığı: ağaç

ve ya servlet-api olan bir jar'e ya da onun gibi bir şeye bağlı olan "bir şeye" geçişli bağımlılığınız olduğunu keşfedersiniz (örn:) tomcat-servlet-api-9.0.0. Öyleyse ponponunuza bir istisna ekleyin, örneğin: (benim durumumda, erkek kedi, sizin durumunuzda, muhtemelen diğer cevaplarda bahsedilenler):

 <dependency>
    ...
    <exclusions>
      <exclusion>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet</artifactId>
      </exclusion>
    </exclusions> 
</dependency>

-4

Tomcat klasöründe mevcut olduğu için servlet.jarkaynak web-inf/libklasörden kaldırın , libardından iyi çalışır


1
Bu cevap, bu cevapta bulunmayan hiçbir şeyi eklemiyor .
Glorfindel
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.