Вы можете решить вашу проблему, включив servlet.jar
в ваш путь к классу при компиляции.
Вот в чем загвоздка:
Если пользователь вашей библиотеки вызывает один из двух методов,Компилятор должен выяснить, какой из двух методов на самом деле вызывать.Если у вас разные имена методов, все в порядке, и компилятору не нужен доступ к HttpServletRequest
.Однако, если у вас одинаковое имя, компилятору необходим доступ к HttpServletRequest
, чтобы решить, какой из двух методов лучше всего подходит для вызова и аргумента.
Таким образом, пользователь вашей библиотеки не будет нужно servlet.jar
до запустить его программу, но если вы используете перегрузку метода, ему понадобится, чтобы она могла скомпилировать его программу.
Вотфиктивный пример, который иллюстрирует это:
Пустой тест-третье лицо lib:
Во-первых, давайте создадим фиктивный сторонний библиотечный файл библиотеки (и выбросим источник):
# libtest$ mkdir thirdpartylib
# libtest$ cat -> thirdpartylib/ThirdPartyClass.java
package thirdpartylib;
public class ThirdPartyClass {
public void thirdPartyMethod() {
System.out.println("Third party method");
}
}
# libtest$ javac thirdpartylib/ThirdPartyClass.java
# libtest$ jar cf thirdpartylib.jar thirdpartylib/ThirdPartyClass.class
# libtest$ rm -rf thirdpartylib
Dummy test your lib:
# libtest$ mkdir mylib
# libtest$ cat -> mylib/LibClass.java
package mylib;
import thirdpartylib.ThirdPartyClass;
public class LibClass {
public void method(String str) {
System.out.println("method 1");
}
// Overloaded method taking third party class as argument.
public void method(ThirdPartyClass tpc) {
tpc.thirdPartyMethod();
}
}
# libtest$ javac -cp .:thirdpartylib.jar mylib/LibClass.java
# libtest$ jar cf mylib.jar mylib/LibClass.class
# libtest$ rm -rf mylib
Проверка использования вашей библиотеки без thirdpartylib.jar
# libtest$ cat -> LibUser.java
import mylib.LibClass;
public class LibUser {
public static void main(String[] args) {
new LibClass().method("Hej");
}
}
# libtest$ javac -cp .:mylib.jar LibUser.java
LibUser.java:5: cannot access thirdpartylib.ThirdPartyClass
class file for thirdpartylib.ThirdPartyClass not found
new LibClass().method("Hej");
^
1 error
# libtest$ javac -cp .:mylib.jar:thirdpartylib.jar LibUser.java
# libtest$ java -cp .:mylib.jar LibUser
method 1