2016-03-02 2 views
0

Я неоднократно искал свою проблему. Некоторые из них были хороши, но не решение моей проблемы. С тех пор я потратил несколько часов, чтобы решить мою проблему.Весна не может найти ресурс пути к курсу

Я начал проект в затмении, используя maven. После этого я добавил пружины и спящий режим в качестве зависимостей. Этот проект не является обычным статическим проектом void main(). Это плагин, который я могу реализовать в другой запущенной программе.

Теперь позвольте мне объяснить мою проблему: Когда я пытаюсь запустить свой плагин (FYI: гнал его в папку/плагинов основной программы), я получаю I/O Exception:

org.bukkit.plugin.InvalidPluginException: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [applicationContext.xml]; nested exception is java.io.FileNotFoundException: 
class path resource [applicationContext.xml] cannot be opened because it does not exist 

applicationContext.xml находится в моей папке src/main/resources, а также в моем пути к классам. Я проверил его с помощью winRar. После процесса сборки applicationContext.xml находился в корневом каталоге. CLICK TO OPEN THE IMAGE

Я также использую плагин apache maven-shade для включения всех моих зависимостей.

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <shadedArtifactAttached>true</shadedArtifactAttached> 
          <transformers> 
           <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <manifestEntries> 
             <mainClass>com.lostforce.core.LostForceCore</mainClass> 
            </manifestEntries> 
           </transformer> 
          </transformers> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

ПриложениеContext.xml может быть найдено! Я проверил его с

System.out.println("Is null: " + (getClassLoader().getResourceAsStream("applicationContext.xml") == null)); 

Это вернуло мне ложь!

я загружаю applicationContext.xml с этим кодом:

context = new ClassPathXmlApplicationContext("applicationContext.xml"); 

Я не знаю, почему это происходит. Все, что я читал об этих проблемах, не работает.

Мой проект: CLICK TO OPEN THE IMAGE

Немного перечень: - SRC/главная/ресурс в моем пути к классам - applicationContext.xml находится в папке SRC/главная/ресурс - построить свой Proect с Maven MVN : чистая упаковка - Используйте плагин maven-shade для включения зависимостей

Надеюсь, кто-нибудь может мне помочь. Спасибо

+0

Должен быть 'getClassLoader() getResourceAsStream ("/ applicationContext.xml")'.. Обратите внимание на косую черту. – Tunaki

+0

Чем выше значение вывода –

+0

Так что это сработало, поздравляю! – Tunaki

ответ

0

Я решил эту проблему! Поскольку мой проект является плагином, я должен определить другой загрузчик классов. Поэтому я создал этот метод запуска:

public class SpringBootstrap { 

private final ClassLoader classLoader = SpringBootstrap.class.getClassLoader(); 

public ApplicationContext startupSpring() { 
    ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml") { 
     protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) { 
      super.initBeanDefinitionReader(reader); 
      reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE); 
      reader.setBeanClassLoader(classLoader); 
      setClassLoader(classLoader); 
     } 
    }; 
    return context; 
} 

}