Ответ 1
См. список зависимостей , которые commons-vfs требует, чтобы sftp работал. Когда JSch находится в пути к классам, ваше исключение больше не происходит. Посмотрите Apache Wiki для примеров подключения через sftp.
Мы пытаемся использовать Apache Commons VFS для доступа к чему-то через SFTP. Он утверждает, что поддерживает SFTP, однако мы получаем MalformedURLException при запуске. Копаясь, я вижу, что apache vfs использует java.net.URL
. Однако документация говорит мне, что на самом деле она не поддерживает sftp://
URL.
Протоколы протоколов для следующих протоколов гарантированы в пути поиска: -
http, https, ftp, file, and jar
Также могут быть доступны обработчики протоколов для дополнительных протоколов.
Я использую java 1.6.0 для Linux. Как я могу предотвратить java.net.URL
отбрасывания шаткого, когда он видит URL sftp://
? Мне нужно продолжать использовать библиотеку VFS для головоломок Apache, которая использует java.net.URL
.
См. список зависимостей , которые commons-vfs требует, чтобы sftp работал. Когда JSch находится в пути к классам, ваше исключение больше не происходит. Посмотрите Apache Wiki для примеров подключения через sftp.
Я никогда раньше не использовал VFS, но похоже, что вам нужно (по крайней мере) register a SFTP FileProvider
. Похоже, что это требует чего-то вроде:
DefaultFileSystemManager fsm = ... /* Create and configure your FSM. */
fsm.addProvider("sftp", new SftpFileProvider());
Вероятно, есть способ сделать то же самое через синтаксис файла конфигурации.
Посмотрите это описание о том, как реализовать новый обработчик протокола URL (документ описывает тип URL-адреса LDAP, но вы должны быть в состоянии обобщить это на вашу схему sftp
).
Из документа:
Как вы можете видеть, единственная разница между двумя примерами заключается в том, что мы использовали URL-адрес LDAP во втором дело. Однако для запуска LDAP образец вам сначала нужно будет зарегистрироваться обработчик протокола LDAP IAIK-JCE указать структуру URL-адреса java.net где искать поддержку LDAP классы IAIK-JCE:
System.getProperties().put("java.protocol.handler.pkgs", "iaik.x509.net");
После зарегистрировал протокол IAIK LDAP обработчик, IAIK-JCE LdapURLConnection объект возвращается при вызове url.openСоединение для URL-адреса LDAP.
(акцент мой)
Я использую jsch для обработки sftp и ssh. Это не поможет вам исключить исключение из java.net.URL, но это поможет вам делать вещи sftp.
В зависимости от того, как структурирован ваш код, вы можете удалить s до того, как вы передадите строку методу синтаксического анализа URL, установите флаг, и если он проверяет, отметьте этот флаг и верните его, если он установлен. Это уродливо, но это обеспечит обходной путь.