使用maven创建scala项目,scala-archetype-simple有bug,会遇到一些问题,这里整理记录一下。

我的环境是:

maven 3.3.9eclipse 4.6java 1.8

通过命令行的形式创建 scala项目:

mvn archetype:generate -B  \  -DarchetypeGroupId=net.alchim31.maven -DarchetypeArtifactId=scala-archetype-simple -DarchetypeVersion=1.6 \  -DgroupId=com.hainiubl.scala -DartifactId=scala-demo -Dversion=1.0 -Dpackage=com.hainiubl.scala.demo

命令执行完后的目录结构:

  scala-demo tree.├── pom.xml├── src│   ├── main│   │   └── scala│   │       └── com│   │           └── hainiubl│   │               └── scala│   │                   └── demo│   │                       └── App.scala│   └── test│       └── scala│           └── samples│               ├── junit.scala│               ├── scalatest.scala│               └── specs.scala└── target

使用scala 2.11 编译工程会有问题:

  • scala 2.11不支持这个make参数了,从pom.xml中把这个参数去掉

[ERROR] scalac error: bad option: '-make:transitive'
  • 生成的pom.xml缺少一个依赖

[ERROR] /Users/sandy/workspace/scala-demo/src/test/scala/samples/specs.scala:18: error: not found: type JUnitRunner[ERROR] @RunWith(classOf[JUnitRunner])[ERROR]                  ^[ERROR] one error found

在pom.xml中增加

    
        
org.specs2
        
specs2-junit_${scala.compat.version}
        
2.4.16
        
test
    
  • java 和 scala的版本可以修改成你想要的版本

    我这里改成了1.8

修改后完整的pom.xml

  
4.0.0
  
com.hainiubl.scala
  
scala-demo
  
1.0
  
${project.artifactId}
  
My wonderfull scala app
  
2015
  
    
      
My License
      
http://....
      
repo
    
  
  
    
1.8
    
1.8
    
UTF-8
    
2.11.8
    
2.11
  
  
    
      
org.scala-lang
      
scala-library
      
${scala.version}
    
    
    
      
junit
      
junit
      
4.12
      
test
    
    
      
org.specs2
      
specs2-core_${scala.compat.version}
      
2.4.16
      
test
    
    
        
org.specs2
        
specs2-junit_${scala.compat.version}
        
2.4.16
        
test
    
    
      
org.scalatest
      
scalatest_${scala.compat.version}
      
2.2.4
      
test
    
  
  
    
src/main/scala
    
src/test/scala
    
      
        
        
net.alchim31.maven
        
scala-maven-plugin
        
3.2.0
        
          
            
              
compile
              
testCompile
            
            
              
                
-dependencyfile
                
${project.build.directory}/.scala_dependencies
              
            
          
        
      
      
        
org.apache.maven.plugins
        
maven-surefire-plugin
        
2.18.1
        
          
false
          
true
          
          
          
            
**/*Test.*
            
**/*Suite.*
          
        
      
    
  

打包编译一下:

mvn package

通过eclipse创建 scala项目:

默认没有scala的archetype,创建maven项目时自己指定一下:

archetype GroupId:net.alchim31.maven

archetype ArtifactId:scala-archetype-simple
archetypeVersion:1.6

1.5或1.6都可以,创建好项目后自己可以修改相应版本

file

其它修改可以参考上面的 pom.xml,道理是一样的。

pom.xml 还有可能会报错:

Multiple annotations found at this line:    - Plugin execution not covered by lifecycle configuration: net.alchim31.maven:scala-maven-plugin:3.2.0:testCompile (execution:      default, phase: test-compile)    - Plugin execution not covered by lifecycle configuration: net.alchim31.maven:scala-maven-plugin:3.2.0:compile (execution:      default, phase: compile)

解决办法

eclipse 菜单 Window->Preference->Maven->Errors/Warnings->Plugin execution not covered by lifecycle configuration 改成 ignore