2012-02-24 60 views
1

我使用Maven + Eclipse + M2e + Scala,並注意到eclipse和maven命令行中編譯器的不同行爲。Scala導入編譯器錯誤

例如行家(命令行)抱怨如下:

[ERROR] /home/julien/Documents/donnees/projets/site-garde-enfants/java/service/src/test/scala/com/bignibou/dao/DAOTest.scala:18: error: AdvertisementService is not a member of com.bignibou.service.advertisement 
[INFO] import com.bignibou.service.advertisement.AdvertisementService 
[INFO]  ^

,而我沒有得到日食中的任何編譯器錯誤...

誰能幫助嗎?

這裏是我的POM:

<?xml version="1.0" encoding="UTF-8"?> 
<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> 
    <parent> 
     <groupId>com.bignibou</groupId> 
     <artifactId>bignibou</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 
    <groupId>com.bignibou</groupId> 
    <artifactId>bignibou-service</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <name>bignibou-service</name> 

    <!-- Shared version number properties --> 
    <properties> 
     <org.springframework.version>3.1.0.RELEASE</org.springframework.version> 
    </properties> 

    <dependencies> 
     <!-- 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> 
     </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> 

     <!-- 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> 

     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-jpa</artifactId> 
      <version>1.0.3.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.bignibou</groupId> 
      <artifactId>bignibou-domain</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.6</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-collections</groupId> 
      <artifactId>commons-collections</artifactId> 
      <version>3.1</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.4.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.velocity</groupId> 
      <artifactId>velocity</artifactId> 
      <version>1.7</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.velocity</groupId> 
      <artifactId>velocity-tools</artifactId> 
      <version>2.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.scala-lang</groupId> 
      <artifactId>scala-library</artifactId> 
      <version>2.9.1</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <sourceDirectory>src/main/scala</sourceDirectory> 
     <testSourceDirectory>src/test/scala</testSourceDirectory> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <includes> 
        <include>**/*.xml</include> 
        <include>**/*.htm</include> 
        <include>**/*.properties</include> 
       </includes> 
      </resource> 
     </resources> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.eclipse.m2e</groupId> 
        <artifactId>lifecycle-mapping</artifactId> 
        <version>1.0.0</version> 
        <configuration> 
         <lifecycleMappingMetadata> 
          <pluginExecutions> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId>org.scala-tools</groupId> 
             <artifactId>maven-scala-plugin</artifactId> 
             <versionRange>[2.15.0,)</versionRange> 
             <goals> 
              <goal>test-compile</goal> 
              <goal>compile</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <execute /> 
            </action> 
           </pluginExecution> 
          </pluginExecutions> 
         </lifecycleMappingMetadata> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.scala-tools</groupId> 
       <artifactId>maven-scala-plugin</artifactId> 
       <version>2.15.0</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>testCompile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <includes> 
         <include>**/*Test.*</include> 
        </includes> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

和我的Scala類:

package com.bignibou.dao 

import java.sql.Timestamp 
import java.util.ArrayList 
import java.util.Collection 
import java.util.Date 
import java.util.List 

import javax.inject.Inject 

import org.junit.Test 
import org.junit.runner.RunWith 
import org.springframework.test.context.ContextConfiguration 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner 

import com.bignibou.domain._ 
import com.bignibou.oldDao.DAO 
import com.bignibou.service.advertisement.AdvertisementService 

@RunWith(classOf[SpringJUnit4ClassRunner]) 
@ContextConfiguration(Array("classpath:bignibou-configuration-context.xml")) 
class DAOTest { 

    @Inject 
    val dao: DAO 

    @Inject 
    val advertisementService: AdvertisementService 

    @Test 
    def testPersistChildminderAdvertisement = { 
    val childminderAdvertisement: ChildminderAdvertisement = new ChildminderAdvertisement 

    val availabilities = new ArrayList[AdvertisementToTimeSlotToDayJoin] 

    val avail_1: AdvertisementToTimeSlotToDayJoin = new AdvertisementToTimeSlotToDayJoin 
    avail_1.setAdvertisement(childminderAdvertisement) 
    avail_1.setDay(new Day(2)) 
    avail_1.setTimeSlot(new TimeSlot(3)) 

    val avail_2: AdvertisementToTimeSlotToDayJoin = new AdvertisementToTimeSlotToDayJoin 
    avail_2.setAdvertisement(childminderAdvertisement) 
    avail_2.setDay(new Day(1)) 
    avail_2.setTimeSlot(new TimeSlot(1)) 

    availabilities.add(avail_1) 
    availabilities.add(avail_2) 

    childminderAdvertisement.setAdvertisementToTimeSlotToDayJoinCollection(availabilities) 

    // childcarelocation 
    val childCareLocation: ChildCareLocation = new ChildCareLocation(2) 
    childminderAdvertisement.setChildcarelocationID(childCareLocation) 

    // childcaretype 
    val childCareType_one: ChildCareType = new ChildCareType 
    childCareType_one.setChildcaretypeID(1) 
    val childCareType_two: ChildCareType = new ChildCareType() 
    childCareType_two.setChildcaretypeID(3) 
    val col: Collection[ChildCareType] = new ArrayList[ChildCareType]() 

    col.add(childCareType_one) 
    col.add(childCareType_two) 

    childminderAdvertisement.setChildCareTypeCollection(col) 

    // misc 
    childminderAdvertisement.setAdvertisementTitle("titre mlqkjflmkqsdf") 
    childminderAdvertisement.setAdvertisementBody("sdlkfj toto est beau") 
    childminderAdvertisement.setAdvertisementCreationDate(new Timestamp(new Date().getTime())) 
    val childminderAccount: Account = dao.loadAccountFromAccountEmailAddress("[email protected]") 
    childminderAdvertisement.setAccountID(childminderAccount) 

    advertisementService.persistChildminderAdvertisement(childminderAdvertisement) 
    } 
} 

回答

1

如果你希望你的Scala類在Maven的編譯,你必須添加適當的插件。沒有插件,這些類不會被編譯。 Maven的行爲與所提供的POM相關...

<plugin> 
      <groupId>org.scala-tools</groupId> 
      <artifactId>maven-scala-plugin</artifactId> 
      <version>2.15.2</version> 
      <configuration> 
       <args> 
        <arg>-optimise</arg> 

       </args> 
       <scalaVersion>2.9.1</scalaVersion> 
       <!--fork>false</fork--> 

      </configuration> 
      <executions> 


       <execution> 
        <id>compile</id> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
        <phase>compile</phase> 
       </execution> 
       <execution> 
        <id>test-compile</id> 
        <goals> 
         <goal>testCompile</goal> 
        </goals> 
        <phase>test-compile</phase> 
       </execution> 
       <execution> 
        <phase>process-resources</phase> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin>