Я новичок в HtmlUnit и действительно во всем, что выходит за рамки стандартной библиотеки java, и я получаю эту ошибку, когда пытаюсь скомпилировать простую программу для печати содержимого веб-страницы.
Error occurred during initialization of boot layer
java.lang.module.FindException: Unable to derive module descriptor for /Users/***/eclipse-workspace/Research/lib/xalan-2.7.2.jar
Caused by: java.lang.module.InvalidModuleDescriptorException: Provider class org.apache.bsf.BSFManager not in module
Кажется, проблема связана с зависимостью HtmlUnit, но я загрузил все необходимые зависимости и создал справочную библиотеку для своего проекта. Я попытался повторно загрузить ксалан по отдельности, но возникла та же проблема.
Я использую Eclipse 4.15.0, последнюю версию java и jdk, и я написал этот код, чтобы проверить, правильно ли я настроил HtmlUnit.
import java.io.IOException;
import java.net.MalformedURLException;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class cccbdbParser {
public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
// TODO Auto-generated method stub
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setJavaScriptEnabled(true);
HtmlPage page = webClient.getPage("https://cccbdb.nist.gov/expgeom1x.asp");
String pageContent = page.asText();
System.out.println(pageContent);
}
}
Есть какие-нибудь советы, как решить эту проблему? Мне не удалось найти никакой документации об этом исключении в HtmlUnit, похоже, для других оно работает нормально.
Изменить: этот ответ https://stackoverflow.com/a/54682966/13521721 описывает, откуда возникает проблема, но не как это решить. В JAR для модуля xalan
версии 2.7.2 класс провайдера не упакован в зависимости. (В пакете org.apache
нет пакета bfs
и класса BSFManager
, что вызывает исключение). Кто-нибудь знает, как это обойти?