Bagaimana saya bisa memberi tahu Maven 2 untuk memuat API Servlet 3.0?
Saya mencoba:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
Saya menggunakan http://repository.jboss.com/maven2/ tetapi repositori apa yang benar?
Tambahan:
Ini berfungsi dengan ketergantungan untuk seluruh Java EE 6 API dan pengaturan berikut:
<repository>
<id>java.net</id>
<url>http://download.java.net/maven/2</url>
</repository>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Saya lebih suka hanya menambahkan Servlet API sebagai dependensi, tetapi "Brabster" mungkin benar bahwa dependensi yang terpisah telah digantikan oleh Java EE 6 Profiles. Apakah ada sumber yang mengkonfirmasi asumsi ini?
java
maven-2
servlets
jakarta-ee
deamon
sumber
sumber
servlet-api
menjadijavax.servlet-api
. Kehilangan setengah jam "debugging" ...: /Jawaban:
Sejujurnya, saya tidak yakin untuk mengerti mengapa tetapi tidak apa-apa ...
Repositori pakar dari Java.net memang menawarkan artefak berikut untuk WebProfile:
Guci ini termasuk Servlet 3.0, EJB Lite 3.1, JPA 2.0, JSP 2.2, EL 1.2, JSTL 1.2, JSF 2.0, JTA 1.1, JSR-45, JSR-250.
Tetapi setahu saya, tidak ada yang memungkinkan untuk mengatakan bahwa API ini tidak akan didistribusikan secara terpisah (di repositori java.net atau di tempat lain). Sebagai contoh (ok, ini mungkin kasus tertentu), JSF 2.0 API tersedia secara terpisah (dalam repositori java.net):
Dan sebenarnya, Anda bisa mendapatkannya
javax.servlet-3.0.jar
dari sana dan menginstalnya di repositori Anda sendiri.sumber
javaee-web-api
hanya berisi potongan metode (tidak ada kode byte). Anda tidak dapat menggunakan dependensi ini di luarprovided
lingkup yang mengapa saya lebih suka saran dari Sa'ad.<version>7.0</version>
Ini sepertinya ditambahkan baru-baru ini:
http://repo1.maven.org/maven2/javax/servlet/javax.servlet-api/3.0.1/
sumber
servlet-api
? Karena itu menyenangkan untuk menambahkan<excludes>
untuk artifactId lama (untuk mencegah mendapatkan api servlet lama dan baru di classpath Anda jika salah satu dependensi Anda masih tergantung pada yang lama)? :)javax.servlet-api-3.1.0
. Pastikan wadah Servlet Anda dapat menangani versi itu. Misalnya Versi 8 dari Tomcat dapat menangani 3.1 .Atau Anda dapat menggunakan Central Maven Repository dengan Servlet 3.0 API yang juga disediakan untuk Tomcat Server 7.0.X
dari sini: http://repo2.maven.org/maven2/org/apache/tomcat/tomcat-servlet-api/7.0.21/
sumber
Inilah yang saya gunakan. Semua ini ada di Pusat dan memiliki sumber.
Untuk Tomcat 7 (Java 7, Servlet 3.0)
Catatan - Servlet, JSP dan EL API disediakan di Tomcat. Hanya JSTL (jika digunakan) yang perlu dibundel dengan aplikasi web.
Untuk Tomcat 8 (Java 8, Servlet 3.1)
sumber
Sayangnya, menambahkan javaee- (web) -api sebagai dependensi tidak memberi Anda Javadoc atau Sumber ke Servlet Api untuk menjelajahinya dari dalam IDE. Ini juga merupakan kasus untuk semua dependensi lainnya (JPA, EJB, ...) Jika Anda memerlukan sumber Servlet API / javadoc, Anda dapat menambahkan yang berikut ke pom.xml Anda (setidaknya berfungsi untuk JBoss & Glassfish):
Gudang:
Ketergantungan:
Saya benar-benar menghapus javaee-api dari dependensi saya dan menggantinya dengan bagian diskrit (javax.ejb, javax.faces, ...) untuk mendapatkan sumber dan Javadocs untuk semua bagian Java EE 6.
EDIT:
Berikut ini adalah ketergantungan Glassfish yang setara (meskipun kedua dependensi itu berfungsi, tidak peduli apa pun appserver yang Anda gunakan).
sumber
1.0.0.Beta2
, jika itu versi3.0
yang kita butuhkan? Ini membuatnya kompleks.Proyek Apache Geronimo menyediakan ketergantungan Servlet 3.0 API pada repo Maven Central:
sumber
Hanya untuk pendatang baru.
sumber
Saya menemukan contoh POM untuk API Servlet 3.0 di DZone mulai September.
Sarankan Anda menggunakan repo java.net, di http://download.java.net/maven/2/
Ada Java EE APIs di sana, misalnya http://download.java.net/maven/2/javax/javaee-web-api/6.0/ dengan POM yang terlihat seperti apa yang Anda cari, misalnya :
Saya menduga bahwa konvensi versi untuk API telah diubah agar sesuai dengan versi spesifikasi EE keseluruhan (yaitu Java EE 6 vs Servlets 3.0) sebagai bagian dari 'profil' baru. Melihat di JAR, sepertinya semua 3.0 servlet ada di sana. Nikmati!
sumber
Cara mudah (disarankan JBoss) untuk memasukkan dependensi Java EE 6 ditunjukkan di bawah ini. Akibatnya dependensi ditempatkan secara terpisah (tidak semua dalam satu stoples seperti di javaee-web-api), file sumber dan javadocs perpustakaan tersedia untuk diunduh dari repositori maven.
Untuk memasukkan dependensi individual saja,
dependencyManagement
bagian dan ruang lingkupimport
dapat digunakan:sumber
Coba kode ini ...
sumber