Обновлено: главный ответ на вопрос Этот говорит о различных средах компиляции и производства. Второй ответ - исправить это в Eclipse. Я запускаю этот код в IntelliJ, и у меня нет разных сред для компиляции и производства. Я просто нажимаю кнопку «Выполнить» в IntelliJ. Также вопрос нигде не дублирует то, что там задают.
Я пытаюсь создать простую программу Spring. Это структура папок:
.
├── firstSpringProject.iml
├── pom.xml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── webograffiti
│ │ ├── MainClass.java
│ │ └── Student.java
│ └── resources
│ └── applicationContext.xml
Вот код, записанный в этих файлах:
Student.java
package com.webograffiti;
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void displayInfo(){
System.out.println("Hello "+name);
}
}
MainClass.java
package com.webograffiti;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainClass {
public static void main(String [] args){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Student obj = (Student) context.getBean("student");
obj.displayInfo();
}
}
applicationContext.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "student" class = "com.webograffiti.Student">
<property name = "name" value = "Piyush"/>
</bean>
</beans>
Пытаюсь запустить MainClass.main(). Но получаю это исключение:
Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.beans.support.ResourceEditorRegistrar.<init>(Lorg/springframework/core/io/ResourceLoader;)V
at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:446)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:355)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.webograffiti.MainClass.main(MainClass.java:8)
У меня есть все зависимости, необходимые для запуска этого кода, а именно. spring-core, spring-beans, spring-osgi-core. Это может быть ошибка пути к классам, но я не могу найти решение.
Это в 99% случаев из-за разных версий библиотек между средами сборки и развертывания (и здесь часто спрашивают). Пожалуйста, дважды проверьте, что у вас одинаковые библиотеки в обоих местах.
@JimGarrison У меня нет отдельных сред, и я использую его в IntelliJ. Вы можете помочь мне это исправить? Я не могу найти решения по вопросу, который, по вашему мнению, является дубликатом.
Вы развертываете на встроенном сервере в IntelliJ? если да, проверьте конфигурацию сервера и путь к классам. В противном случае вам, вероятно, следует выполнить полностью чистую перестройку всего проекта, чтобы обновить все файлы .class.
@JimGarrison, В файле MainClass есть main (). Сгенерированный файл Jar работает в моей локальной системе. Он не запущен на сервере. Также сделал mvn clean install, проблема все еще сохраняется.
Возможно, пришло время переустановить IntelliJ. Единственный способ возникновения этой ошибки - это компиляция с зависимостью, которая имеет этот конкретный конструктор ResourceEditorRegistrar(org.springframework.core.io.ResourceLoader loader), но когда IntelliJ попытался выполнить код, он успешно загрузил класс ResourceEditorRegistrar, но не смог найти этот конкретный конструктор. Возможно ли, что в вашем пути к классам есть две разные версии ОДНОЙ библиотеки?
@JimGarrison, пожалуйста, снова откройте этот вопрос, чтобы тот, кто действительно имеет представление о том, что происходит, мог ответить.
Я сделаю это, но нет никаких гарантий, что кто-то другой не закроет его снова.



