Есть ли способ загрузить файл jar из репозитория maven с помощью java или любого другого языка?
В проекте Maven, когда я добавляю зависимость, он обычно загружает файлы jar из удаленного репозитория, если он не существует в локальной системе.
Есть ли способ сделать это без использования Maven, например, в библиотеке, или создать URL-адрес, а затем получить банку?
«получить банку» — вы хотите загрузить только один файл JAR — без каких-либо зависимостей? Вы мая сможете построить требуемый URL-адрес для загрузки, если вы знаете подробности зависимости (и, возможно, также имя файла JAR, если оно не соответствует координатам зависимости). Посмотрите на ссылку jar
на типичной странице Maven, такой как Вот этот. Я не знаю, почему вы хотели бы это сделать или насколько это было бы полезно без его транзитивных зависимостей... Вы можете просто написать свое собственное приложение "Maven-Lite".
Ни в коем случае не в качестве критики, но мне также интересно, что мотивирует желание сделать это? У вас есть какой-то конкретный вариант использования?
Ну, у меня нет варианта использования для этого, мне просто интересно, как это сделать.
Вы можете легко загрузить любые файлы jar или pom из общедоступных репозиториев, например
https://repo1.maven.org/maven2/...
<!-- Example -->
https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter/2.6.7/
Загрузка файла в Java довольно проста, существует множество способов сделать это, если у вас есть URL-адрес.
Обычно вы найдете информацию, связанную с загрузками, непосредственно на веб-странице репозитория, большую часть времени эта информация также находится на веб-сайте maven, хотя maven был создан именно для устранения ошибок с загруженными jar-файлами.
Перейдите в браузере к https://mvnrepository.com/, затем вы можете войти в библиотеку, которую ищете, и затем щелкнуть нужную версию. После нажатия на версию появится таблица со строкой Файлы, которая содержит ссылки на файлы .pom и .jar.
Приложение Java для загрузки файла с URL-адреса:
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.net.URL;
import java.net.MalformedURLException;
public class Download {
public static void main(String[] args) throws MalformedURLException, IOException{
String url = args[0];
String fileName = url.substring(url.lastIndexOf('/') + 1, url.length());
try( InputStream in = new URL(args[0]).openStream()) {
Files.copy(in, Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING);
}
}
}
$ java Download.java https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/3.36.0.3/sqlite-jdbc-3.36.0.3.jar
$ ls sqlite-jdbc-3.36.0.3.jar
sqlite-jdbc-3.36.0.3.jar
$
За исключением Java, все остальное работает так же хорошо для загрузки, т.е. загрузка через браузер или с помощью инструмента командной строки, такого как curl
:
$ curl https://repo1.maven.org/maven2/org/json/json/20220320/json-20220320.jar --output json-20220320.jar
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 70939 100 70939 0 0 339k 0 --:--:-- --:--:-- --:--:-- 348k
Найдите URL-адрес файла jar, используя это: Как скачать банки из репозитория Maven Затем используйте этот код для загрузки файла jar с URL-адреса:
try (BufferedInputStream in = new BufferedInputStream(new URL(FILE_URL).openStream());
FileOutputStream fileOutputStream = new FileOutputStream(FILE_NAME)) {
byte dataBuffer[] = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(dataBuffer, 0, 1024)) != -1) {
fileOutputStream.write(dataBuffer, 0, bytesRead);
}
} catch (IOException e) {
// handle exception
}
Все сводится к построенному URL. Преимущество использования maven заключается в том, что он понимает зеркала, если они настроены, и т. д. Какую основную проблему вам нужно решить?