Я пытался запустить устаревший проект, используя весеннюю версию 3 с build.gradle:
...
plugins {
id 'java'
id 'maven-publish'
id 'war'
}
repositories {
mavenLocal()
maven {
url = uri('https://repo.maven.apache.org/maven2/')
}
}
ext {
org_springframework_version = '3.2.18.RELEASE'
}
dependencies {
...
implementation 'org.springframework.ldap:spring-ldap-core:2.4.1'
implementation "org.springframework:spring-web:${org_springframework_version}"
implementation "org.springframework:spring-webmvc:${org_springframework_version}"
implementation "org.springframework:spring:${org_springframework_version}"
...
}
...
но получая следующую ошибку при попытке сборки:
Execution failed for task ':compileJava'.
> Could not resolve all files for configuration ':compileClasspath'.
> Could not find org.springframework:spring:3.2.18.RELEASE.
Searched in the following locations:
- file:/C:/Users/.../.m2/repository/org/springframework/spring/3.2.18.RELEASE/spring-3.2.18.RELEASE.pom
- https://repo.maven.apache.org/maven2/org/springframework/spring/3.2.18.RELEASE/spring-3.2.18.RELEASE.pom
Required by:
project :
Possible solution:
- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
Я проверил https://repo.maven.apache.org/maven2/org/springframework/spring/ и похоже, что в репозитории нет Spring 3 или 4.
Я не могу использовать более новую версию Spring, так как в проекте есть множество других зависимостей и устаревшего кода, которые следует оставить как есть.
Я смущен тем, почему это так или как построить мой проект сейчас. Любая помощь приветствуется.
PS. Немного предыстории: у меня есть устаревший проект, основанный на очень старой технологии (фреймворк Stripes), который прямо отказывается работать с Spring 5+. Сейчас он работает на Java 6. Я хочу обновить его до java 8. Но зависимость от spring 2.x не позволяет мне это сделать.
Тем не менее, использование repositories { mavenLocal() mavenCentral() }
вызывает ту же проблему. Я делаю что-то неправильно?
Полной весенней банки уже давно нет в наличии. Так что да, нет и никогда не было выпусков 3 и 4 spring.jar
и сейчас нет, поскольку он содержит только pom.xml
. Поэтому удалите зависимость spring
и замените ее чем-то вроде spring-context-support
в зависимости от ваших потребностей. Также используйте mavenCentral()
вместо жестко заданного URL-адреса в своем репо.
Как я уже говорил, полная банка Spring больше не доступна с Spring 2.5. Этого больше нет и никогда не будет, как указано, включая отдельные модули из Spring, которые вам нужны.
Полноценный spring.jar
недоступен с Spring Framework 3.0.0. Spring 2.5.6 — последний, в котором есть полная банка Spring. С тех пор были доступны только меньшие модули.
Версии для 5.x, которые вы видите, представляют собой только некоторые файлы верхнего уровня pom.xml
, которые, я предполагаю, были опубликованы случайно (а для 6.x их больше нет).
Короче говоря, удалите следующую строку из ваших зависимостей
implementation "org.springframework:spring:${org_springframework_version}"
Таким образом, он больше не пытается решить то, что недоступно с Spring 2.5.6. Что вы должны включить, так это зависимости для необходимых вам модулей (что-то вроде зависимостей ниже).
implementation "org.springframework:spring-web:${org_springframework_version}"
implementation "org.springframework:spring-webmvc:${org_springframework_version}"
implementation "org.springframework:spring-jdbc:${org_springframework_version}"
implementation "org.springframework:spring-orm:${org_springframework_version}"
implementation "org.springframework:spring-oxm:${org_springframework_version}"
В качестве дополнительного примечания заменить
maven {
url = uri('https://repo.maven.apache.org/maven2/')
}
с
mavenCentral()
Это позволит Gradle выбрать наиболее подходящее зеркало Maven для вашей среды.
Что делать, если я хочу использовать Spring 3.x или 4.x? У меня есть устаревший проект, основанный на действительно старой технологии (фреймворк Stripes), который прямо отказывается работать с Spring 5+. Сейчас он работает на Java 6. Я хочу обновить его до java 8. Но зависимость от spring 2.x не позволяет мне это сделать.
Где я могу сказать, что вы не можете использовать Spring 3 или 4? Я утверждаю, что вам нужно включить отдельные модули и удалить всеохватывающую зависимость, поскольку ее просто больше не существует!
include the indivudual modules
- это на самом деле сбивает меня с толку, как это сделать. я имею в виду, я должен загрузить его откуда-то и объявить в build.gradle? или я могу включить зависимость в какие-то другие средства? (для весны 4.x)
Вы включаете его, как уже делали с spring-web
или spring-webmvc
. Вы уже включили эти модули в свой build.gradle, просто добавьте другие модули, которые вам нужны.
Хорошо, если я объявлю это как implementation 'org.springframework:spring:4.3.30.RELEASE'
, я получаю ошибку градиента: Execution failed for task ':compileJava'. > Could not resolve all files for configuration ':compileClasspath'. > Could not find org.springframework:spring:4.3.30.RELEASE. Searched in the following locations:...
... Я что-то здесь упустил? Вы уже сказали, что их больше не существует...(?) Так что включение их таким образом не должно работать, верно?
В третий раз удалите всеохватывающую зависимость... Я прямо заявляю, что вам нужно удалить эту зависимость в моем ответе, и вы продолжаете пихать ее туда.
Итак, используйте spring-web, spring-webmvc, spring-jdbc
и т. д., но не spring
. Извините, что так медленно.
Точно... Выясните, какие модули вам нужны, и включите их. Включил это в ответ.
подсказка: зависимость «spring» была переименована в «spring-core» (но, возможно, были разделены меньшие биты).
Зависимость spring
не была переименована в spring-core
. spring-core
— это лишь небольшое подмножество того, что было в модуле spring
(который включал в себя все, кроме материалов, связанных с Интернетом).
Есть ли конкретная причина не использовать репозиторий
mavenCentral()
?