2015-07-01 4 views
4

Когда я запускаю проект, я получаю ошибку компиляции. Я думаю, что я сделал что-то не так в pom.xml. Я пытался сделать пример проекта с весной и добавил зависимости от весенних примеров. Я получаю ошибку, когда выбираю maven build с целью «чистой установки». Я использую Eclipse Luna.Maven Project Wont Build

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>com.rajkishan.learnSpring</groupId> 
<artifactId>RestfulWithSpring</artifactId> 
<version>1.0.0</version> 
<packaging>jar</packaging> 

<name>LearnRESTfulSpring</name> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.2.3.RELEASE</version> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.8</java.version> 
    <!-- Shared version number properties --> 
    <org.springframework.version>4.0.4.RELEASE</org.springframework.version> 
    <start-class>com.rajkishan.Application</start-class> 
</properties> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

    <!-- Core utilities used by other modules. Define this if you use Spring 
     Utility APIs (org.springframework.core.*/org.springframework.util.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Expression Language (depends on spring-core) Define this if you use 
     Spring Expression APIs (org.springframework.expression.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-expression</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Bean Factory and JavaBeans utilities (depends on spring-core) Define 
     this if you use Spring Bean APIs (org.springframework.beans.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Aspect Oriented Programming (AOP) Framework (depends on spring-core, 
     spring-beans) Define this if you use Spring AOP APIs (org.springframework.aop.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-aop</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Application Context (depends on spring-core, spring-expression, spring-aop, 
     spring-beans) This is the central artifact for Spring's Dependency Injection 
     Container and is generally always defined --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>runtime</scope> 
    </dependency> 

    <!-- Various Application Context utilities, including EhCache, JavaMail, 
     Quartz, and Freemarker integration Define this if you need any of these integrations --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Transaction Management Abstraction (depends on spring-core, spring-beans, 
     spring-aop, spring-context) Define this if you use Spring Transactions or 
     DAO Exception Hierarchy (org.springframework.transaction.*/org.springframework.dao.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- JDBC Data Access Library (depends on spring-core, spring-beans, spring-context, 
     spring-tx) Define this if you use Spring's JdbcTemplate API (org.springframework.jdbc.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-jdbc</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Object-to-Relation-Mapping (ORM) integration with Hibernate, JPA, 
     and iBatis. (depends on spring-core, spring-beans, spring-context, spring-tx) 
     Define this if you need ORM (org.springframework.orm.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Object-to-XML Mapping (OXM) abstraction and integration with JAXB, 
     JiBX, Castor, XStream, and XML Beans. (depends on spring-core, spring-beans, 
     spring-context) Define this if you need OXM (org.springframework.oxm.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-oxm</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Web application development utilities applicable to both Servlet and 
     Portlet Environments (depends on spring-core, spring-beans, spring-context) 
     Define this if you use Spring MVC, or wish to use Struts, JSF, or another 
     web framework with Spring (org.springframework.web.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Spring MVC for Servlet Environments (depends on spring-core, spring-beans, 
     spring-context, spring-web) Define this if you use Spring MVC with a Servlet 
     Container such as Apache Tomcat (org.springframework.web.servlet.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Spring MVC for Portlet Environments (depends on spring-core, spring-beans, 
     spring-context, spring-web) Define this if you use Spring MVC with a Portlet 
     Container (org.springframework.web.portlet.*) --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc-portlet</artifactId> 
     <version>${org.springframework.version}</version> 
    </dependency> 

    <!-- Support for testing Spring applications with tools such as JUnit and 
     TestNG This artifact is generally always defined with a 'test' scope for 
     the integration testing framework and unit testing stubs --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>${org.springframework.version}</version> 
     <scope>test</scope> 
    </dependency> 


    <!-- Others --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>jcl-over-slf4j</artifactId> 
     <version>1.5.8</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.5.8</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.5.8</version> 
    </dependency> 

    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.14</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

Когда я бегу я получаю ошибку, как показано ниже, что он не может найти класс пружины.

--- maven-compiler-plugin:3.1:compile (default-compile) @ RestfulWithSpring --- 
[INFO] Changes detected - recompiling the module! 
[INFO] Compiling 3 source files to D:\Rajkishan\EclipseLunaWorkspace\RESTfulWithSpring\target\classes 
[INFO] ------------------------------------------------------------- 
[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] /D:/Rajkishan/EclipseLunaWorkspace/RESTfulWithSpring/src/main/java/com/rajkishan/Application.java:[13,38] cannot access org.springframework.context.ConfigurableApplicationContext 
    class file for org.springframework.context.ConfigurableApplicationContext not found 
[INFO] 1 error 
[INFO]------------------------------------------------------------- 
[INFO]------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 

ответ

5

Я думаю, что проблема в том, что вы область действия пружинного контекст как среда:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>${org.springframework.version}</version> 
    <scope>runtime</scope> 
</dependency> 

Это означает, что вы говорите Maven, что весна-контекст не требуется во время компиляции, когда на самом деле это является.

Попробуйте изменить масштаб для компиляции (что сфера по умолчанию):

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>${org.springframework.version}</version> 
    <scope>compile</scope> 
</dependency> 

или:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 

Для рекомендуемого чтения, посмотрите на документацию Maven для его различных областей и что все они означают here.

+0

Да, вы правы. Я скопировал зависимости, в которых он упоминался, чтобы использовать его так: «если нам не нужно компилировать файлы с использованием API Spring, что обычно имеет место для основных случаев использования инъекций зависимостей». Спасибо. – Raj

+0

Удалите все ваши зависимости и оставите зависимость 'spring-boot-starter-web'. Все ваши другие зависимости транзитивно втягиваются. –

+0

@M. Deinum: Если я делаю это, я получаю Spring Release Version 4.1.6, который я не хочу. – Raj

1

У вас есть много возможностей в ваших зависимостях. spring-boot-starter-web уже втягивает большинство зависимостей. Просто удалите все из них и добавьте spring-boot-starter-log4j для зависимости log4j. Для тестирования добавьте зависимость spring-boot-starter-test.

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-log4j</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

</dependencies> 

В зависимости от ваших потребностей вы, возможно, потребуется добавить other starters иметь зависимости вытащил в.

Вы используете spring-boot-starter-parent в качестве родительского проекта это позволяет вам указать конкретную версию пружины (не рекомендуется) установите для свойства spring.version правильное управление зависимостями. (Вы можете переопределить все перечисленные свойства here).

<properties> 
    <spring.version>4.0.4.RELEASE</spring.version> 
</properties> 
+0

Ничего себе, это было потрясающе. То же самое, но так коротко. Спасибо!!!! – Raj