جافا servlet لن تترجم - لا يمكن العثور على javax.servlet

ايم وجود مشاكل كبيرة في تجميع servlets جافا. بقدر ما أستطيع أن أرى ، فعلت كل شيء إيف القيام به ، ive تثبيت tomcat 7 بشكل صحيح ، وتعمل قط. كما أفهم ، أنا بحاجة إلى إضافة حزمة servlet.jar إلى classpath بلدي. لا يبدو أن هناك servlet.jar على النظام الخاص بي ولكن من ما يمكنني فهمه من مستندات tomcat ، الآن servlet-api.jar.

لقد فعلت ذلك ، عن طريق تحرير مسار classpath في /etc/environment :

PATH = "/ البيرة/المحلية/دليل:/البيرة/المحلية/بن:/البيرة/دليل:/البيرة/بن:/دليل:/بن:/البيرة/ألعاب" CLASSPATH = "/ البيرة/حصة/tomcat7/ليب/بريمج-api.jar"

لسوء الحظ ، لا يوجد حتى الآن الحظ ، لا أستطيع تجميع servlets جافا ، وما زلت الحصول على تحذيرات حول رموز مفقودة لـ javax.servlets .

ايم باستخدام أوبونتو 11.10 إلى x64. أيه أفكار؟

1

3 إجابة

لقد فعلت ذلك ، عن طريق تحرير مسار classpath في /etc/environment :

     

PATH = "/ usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" CLASSPATH = " /usr/share/tomcat7/lib/servlet-api.jar "</القانون> </م>

هذا يبدو على ما يرام. PATH غير ذي صلة بالمشكلة المعينة بالرغم من ذلك. لم يتم استخدامه من قبل جافا بأي شكل من الأشكال. يتم استخدامه فقط من خلال نظام تشغيل النظام للبحث عن الملفات القابلة للتنفيذ. يشبه CLASSPATH ، ولكنه يستخدم فقط بواسطة Java للبحث عن الفصول التي سيتم استخدامها أثناء الترجمة و/أو وقت التشغيل.

سبب المشكلة على الأرجح بسبب استخدامك --cp أو -classpath لوسيطة javac الأمر. في هذه الحالة ، سيتم تجاهل متغير البيئة CLASSPATH (ينطبق هذا أيضًا على الأمر java بالمناسبة ، أيضًا عند -jar يتم استخدام الوسيطة ).

تحتاج إلى تحديد CLASSPATH التي كتبها على فقط </قوي> إما </م> في <�كود> CLASSPATH </القانون> متغير البيئة <�م> أو </م> في <�كود> -cp أو -classpath argument. التوصية العامة هي أن ننسى <�كود> CLASSPATH </القانون> متغير بيئة على الإطلاق، وهذا ما يعتبر ممارسة سيئة كلما كنت تريد أن تفعل أكثر قليلا من مجرد "مرحبا أيها العالم". يمكنك تحديد مسارات متعددة في الوسيطة --cp أو -classpath باستخدام : .

$ cd /path/to/package/root/of/your/servlet/code
$ javac -cp .:/path/to/servlet-api.jar com/example/YourServlet.java

إذا تعبت من تكرار كتابة هذا في كل مرة ، فقط ضعه في .sh ، أو استخدم أداة بناء مثل Ant التي تسمح بالتوصيف بواسطة ملف xml ، أو مجرد استخدام IDE مثل Eclipse ، Netbeans أو IntelliJ التي ستقوم بذلك بشكل تلقائي عندما تقوم فقط بحفظ الملف المصدر.

3
وأضاف

يجب ألا يكون لديك متغير بيئة CLASSPATH.

أفضل طريقة للقيام بذلك هي استخدام الوسيطة -classpath javac.exe عند تجميع و java.exe عند تشغيل. أضف tomcat servlet-api.jar بهذه الطريقة.

اقتراح آخر هو لتعلم النملة. إنها أداة بناء تستند إلى xml ، تستند إلى Java. من الأسهل التعلم والاستخدام من Maven. سأبدأ بذلك.

2
وأضاف

javax.servlets is defined in servlet-api.jar so your issue must be with your config somehow. What are you using to compile? Are you issuing javac commands directly or using a build tool like maven, or ant, or event eclipse? I would recommend maven because it handles dependencies for you with a single configuration file. Really easy to pick up too.

في maven ، ستحتاج إلى البدء عن طريق الحصول على maven تركيب/تهيئتها ، وبدء مشروعك بهيكل ملفات محدد (وهذا أمر بسيط ولكنه كافٍ):

/src/main/java - The root of your java files
/src/main/webapp - The root of your webapp
/pom.xml - Maven configuration file

لذلك قد تكون قائمة الملفات الكاملة ل servlet:

/src/main/java/com/mycompany/myapp/MyServlet.java
/src/main/webapp/WEB-INF/web.xml
/src/main/webapp/index.jsp
/pom.xml

نفس الأسطر الثلاثة (بخلاف بنية ملف الجذر) هي نفسها لأي تطبيق ويب ، والأخير هو ملف التكوين الخاص بك الذي سيبدو كالتالي:


  4.0.0
  com.mycompany
  myapp
  0.0.1-SNAPSHOT
  war

  
    
      javax.servlet
      servlet-api
      2.5
      jar
      provided
    
  

الجزء المهم هنا هو أن الاعتماد على servlet-api يتم التعامل معه من قبل maven ، لذلك ليس هناك حاجة لتنزيله ، أو إعداد مسارات أو أي شيء. وبمجرد الانتهاء من تعيين بنية الملف هذه ، وتحرير pom الخاص بك ، ما عليك سوى الانتقال إلى وحدة التحكم إلى الجذر وكتابة mvn package . سيؤدي ذلك إلى تنزيل الاعتماديات الخاصة بك وتجميع التعليمات البرمجية وتعبئة حربك. هناك الكثير الذي يقدمه maven مع تعديلات ضئيلة للغاية. في المقابل ، سوف تتطلب النملة هذا:

ليتم إضافتها

2
وأضاف
"مافن" و "سهل" لا ينتميان إلى نفس الجملة.
وأضاف المؤلف duffymo, مصدر
أنا لم أتقن الاتفاقية. ربما لا يزال هناك أمل في ذلك ، لكنني أجد أن النملة أسهل بكثير. أنا مستخدم الربيع ، لذلك معظم التبعيات المتاحة لي بسهولة. يعطيني مي Mن المزيد من الصداع أكثر من علاجه.
وأضاف المؤلف duffymo, مصدر
أنا أعرف الفرق بين الربيع و Maven. وجهة نظري أنه عندما أقوم بتنزيل Spring ، أحصل على جميع JARs التابعة في الإصدار الصحيح. ما الذي أحتاجه إلى Maven؟
وأضاف المؤلف duffymo, مصدر
يمكنني التحميل مرة واحدة وأنا مستعد تمامًا. يبدو من الأسهل بالنسبة لي تنزيل نسخة من Spring بدلاً من تحمل Maven مع كل عملية.
وأضاف المؤلف duffymo, مصدر
ولكن الربيع يأتي مع 99 ٪ من التبعيات التي أحتاج إليها. إنه يفرزني بشكل جيد انها مثل مستودع Maven الخاصة بها.
وأضاف المؤلف duffymo, مصدر
قد أريدهم في وقت ما ، وهم لا يضرون على القرص الصلب. أنا الكرز اختيار ما أريد وترك الباقي وراءها. لا يزال أسهل من مافن.
وأضاف المؤلف duffymo, مصدر
duffymo من السهل عندما تكون حالات الاستخدام بسيطة ، مثل تطبيقات الفانيلا ، ومزايا إعادة العرض الافتراضية ، وعدم الإبلاغ ، وما إلى ذلك. الماضي ، نعم ، يتحول إلى ألم حقيقي في بعض الأحيان.
وأضاف المؤلف Dave Newton, مصدر
duffymo ليس كل شيء يأتي مع تبعياته الخاصة ، ولا هو واضح دائمًا ، والتي في الواقع تحتاج إلى تبعيات في الواقع . IMO من الأفضل أن تسمح لشيء آخر بمعالجة إدارة التبعية متعدية في معظم الحالات.
وأضاف المؤلف Dave Newton, مصدر
duffymo ، لقد استخدمت م على حد سواء ، على نطاق واسع. أجد مخضر ليكون أبسط من ذلك بكثير. اتفاقية على التكوين. بمجرد الحصول على اتفاقية بسيطة للغاية ، يمكنك الحصول على الكثير مجانا. الأهم من ذلك ، فإن إدارة التبعية مفيدة بشكل خاص في هذه الحالة (التي يمكن أن تفعلها النملة إذا قمت بتضمين اللبلاب وهو ليس من السهل فهمه).
وأضاف المؤلف Lucas, مصدر
duffymo ، ايم رجل ربيع تماما ، ولكن الربيع يفعل حقن التبعية (الاشياء وقت التشغيل) ، maven هل إدارة التبعية (يضمن جميع الجرار اللازمة لتجميع/اختبار/وقت التشغيل متوفرة في classpath). للمتعة ، سأحاول إضافة بضعة أمثلة سريعة هنا ...
وأضاف المؤلف Lucas, مصدر
duffymo ، آه ، فهمت. لقد مضى وقت طويل منذ أن قمت بتنزيل أي شيء ، لذا أعتقد أن هذا ما أود أن أقوله أنك بحاجة إلى مخضرم. لا حاجة للتنزيل. والنسخ المتغيرة سهله مثل تغيير الرقم في pom (عند هذه النقطة ستقوم بتحديث كل اعتمادياتها كذلك). أيضا ، فإنه سيضمن أن الحزم الأخرى التي لديها تبعيات لا تتعارض مع التبعيات التي جلبت في الربيع. إدارة الإعالة مافين (أو حتى Ivy إذا كنت تريد أن تذهب إلى هناك) كانت من المدخرين الحقيقيين في تجربتي.
وأضاف المؤلف Lucas, مصدر
duffymo ، من شأنه أن يعني أيضًا أنه يأتي مع الكثير من الأشياء التي لا تحتاجها/تريدها (ما لم تستخدم كل شيء في كل مشروع).
وأضاف المؤلف Lucas, مصدر