用Java在各种框架下编译Scala项目

【编译】曾经在“与Scala的***次亲密接触 Java如影相随”为大家讲过Java于Scala。下面是一个教程文件是我在如今***或者说***的Java框架——Spring、Hibernate/JPA、Wicket、Maven和Intellij IDEA上充分利用Java语言调用Scala的项目,希望能帮助其他的Java程序员使用一个企业级的Scala项目。

在IDE上的设置

首先,下载的IntelliJ IDEA的9.0.x(社区版),因为目前它是***的Scala的IDE。然后选择File |设置|插件,选择可用的选项卡来安装Scala插件。

创建Maven项目

在IntelliJ IDEA中,选择文件|新建项目,然后选择Maven的模块创建一个Maven项目。然后修改如下所示的pom.xml。添加所有你需要的设置,建立Scala的汇编语言:

 
 
 
  1.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">           
  2.     4.0.0           
  3.     com.foo           
  4.     myapp           
  5.     war           
  6.     1.0-SNAPSHOT           
  7.     myapp Java EE 6 Webapp           
  8.     http://maven.apache.org           
  9.                
  10.         3.0.3.RELEASE           
  11.                
  12.            
  13.                
  14.                    
  15.             java.net2           
  16.             Repository hosting the jee6 artifacts           
  17.             http://download.java.net/maven/2           
  18.                    
  19.            
  20.                    
  21.             scala-tools.org           
  22.              Scala-tools Maven2 Repository          
  23.             http://scala-tools.org/repo-releases           
  24.            
  25.                    
  26.                    
  27.              wpt-release          
  28.             http://wicketpagetest.sourceforge.net/m2-repo/releases           
  29.            
  30.                    
  31.                    
  32.              wpt-snapshot          
  33.             http://wicketpagetest.sourceforge.net/m2-repo/snapshots           
  34.            
  35.                    
  36.                
  37.                
  38.                    
  39.             scala-tools.org           
  40.             Scala-tools Maven2 Repository           
  41.             http://scala-tools.org/repo-releases           
  42.                    
  43.            
  44.                
  45.                
  46.                    
  47.                        
  48.                  org.springframework          
  49.                 spring-context           
  50.            
  51.                 ${spring.version}           
  52.                        
  53.            
  54.                        
  55.                 org.springframework           
  56.            
  57.                 spring-core           
  58.                 ${spring.version}           
  59.                        
  60.                        
  61.                 org.springframework           
  62.                  spring-web          
  63.            
  64.                 ${spring.version}           
  65.                        
  66.            
  67.                        
  68.                 org.springframework           
  69.            
  70.                  spring-orm          
  71.                 ${spring.version}           
  72.            
  73.                        
  74.                    
  75.                
  76.                
  77.                    
  78.             com.h2database           
  79.             h2           
  80.             1.2.120           
  81.                    
  82.                    
  83.              org.hibernate          
  84.             hibernate-entitymanager           
  85.            
  86.             3.4.0.GA           
  87.                    
  88.                    
  89.             org.springframework           
  90.             spring-orm           
  91.                    
  92.                    
  93.             com.ttdev           
  94.             wpt-core           
  95.             1.5.2-SNAPSHOT           
  96.             test           
  97.                    
  98.                    
  99.             com.ttdev           
  100.             wpt-runtime-spring           
  101.              1.5.2-SNAPSHOT          
  102.            
  103.                    
  104.                    
  105.              javax          
  106.             javaee-web-api           
  107.            
  108.             6.0           
  109.             provided           
  110.                    
  111.                    
  112.             junit           
  113.             junit           
  114.             3.8.2           
  115.             test           
  116.                    
  117.                    
  118.             org.scala-lang           
  119.             scala-library           
  120.             2.8.0.RC3           
  121.                    
  122.                    
  123.             org.apache.wicket           
  124.             wicket           
  125.             1.4.9           
  126.                    
  127.                    
  128.             org.slf4j           
  129.             slf4j-log4j12           
  130.             1.4.2           
  131.                    
  132.                
  133.                
  134.                    
  135.                        
  136.                            
  137.                     org.apache.maven.plugins           
  138.            
  139.                     maven-compiler-plugin           
  140.                      2.0.2          
  141.            
  142.                            
  143.                            
  144.                      org.scala-tools          
  145.                     maven-scala-plugin           
  146.            
  147.                     2.9.1           
  148.                            
  149.                        
  150.                    
  151.                    
  152.                        
  153.                  org.apache.maven.plugins          
  154.                 maven-compiler-plugin           
  155.            
  156.                            
  157.                                
  158.                         compile           
  159.                                    
  160.                             compile           
  161.                                    
  162.                                
  163.                            
  164.                            
  165.                     1.6           
  166.                     1.6           
  167.                            
  168.                        
  169.                        
  170.                 org.apache.maven.plugins           
  171.                  maven-war-plugin          
  172.            
  173.                 2.1-beta-1           
  174.                            
  175.                     false           
  176.                            
  177.            
  178.                        
  179.                        
  180.                  org.scala-tools          
  181.                 maven-scala-plugin           
  182.            
  183.                            
  184.                                
  185.                          scala-compile-first          
  186.                         process-resources           
  187.            
  188.                                    
  189.                             add-source           
  190.            
  191.                             compile           
  192.                                    
  193.                                
  194.                                
  195.                          scala-test-compile          
  196.                         process-test-resources           
  197.            
  198.                                    
  199.                             testCompile           
  200.            
  201.                                    
  202.                                
  203.                            
  204.                        
  205.                    
  206.         myapp           
  207.                
  208.          

等待一段时间,IDEA将提示导入的项目是否需要更改。回答是肯定。

#p#

web.xml中设置

接下来,修改main/webapp/WEB-INF/web.xml。从而确立了Wicket的过滤器,打开Spring的JPA实体管理器和Spring监听器,进行Spring的初始化。

 
 
 
  1.            
  2.            
  3.          xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">           
  4.                
  5.            
  6.          f2          
  7.         org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter           
  8.            
  9.                
  10.                
  11.          f1          
  12.         org.apache.wicket.protocol.http.WicketFilter           
  13.            
  14.                    
  15.             applicationClassName           
  16.            
  17.             com.foo.myapp.MyApp           
  18.                    
  19.            
  20.                
  21.                
  22.         f1           
  23.         /app/*           
  24.                
  25.                
  26.         f2           
  27.         /*           
  28.                
  29.                
  30.         contextConfigLocation           
  31.         classpath:/beans.xml           
  32.                
  33.                
  34.         org.springframework.web.context.ContextLoaderListener           
  35.                
  36.            
  37.            

#p#

设置Spring bean访问和调用的数据库

要定义这些Spring bean,创建main/resources的beans.xml以及一下的内容:

 
 
 
  1.          
  2.           
  3.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         
  4.        xmlns:context="http://www.springframework.org/schema/context"          
  5.           
  6.         xmlns:tx="http://www.springframework.org/schema/tx"         
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans          
  8.           
  9.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd          
  10.          http://www.springframework.org/schema/context         
  11.           
  12.         http://www.springframework.org/schema/context/spring-context-3.0.xsd          
  13.          http://www.springframework.org/schema/tx         
  14.           
  15.         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">          
  16.               
  17.           
  18.               
  19.                   
  20.               
  21.               
  22.           
  23.                   
  24.               
  25.           
  26.               
  27.  

读取数据库配置中persistence.xml文件。在这里,您将获得一个主目录中名为MyApp的H2数据库。因此,创建main/resources/META-INF文件的内容如下。

 
 
 
  1.             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           
  2.           
  3.             xsi:schemaLocation="http://java.sun.com/xml/ns/persistencehttp://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"           
  4.              version="2.0">          
  5.           
  6.               
  7.         org.hibernate.ejb.HibernatePersistence          
  8.           
  9.                   
  10.                       
  11.           
  12.                       
  13.                       
  14.           
  15.                       
  16.                       
  17.           
  18.                       
  19.                   
  20.           
  21.               
  22. /persistence>       

#p#

创建Wicket的页面

在这里,您将创建一个Wicket页面显示从数据库加载一些内容。因此,创建主/Scala文件夹,右键单击它并选择新建|Scala类。命名为我的页面类和投入com.foo.myapp包中。如下所示:

 
 
 
  1. package com.foo.myapp           
  2.            
  3. import org.apache.wicket.markup.html._           
  4. import basic.Label           
  5.  import list.{ListItem, ListView}          
  6. importorg.apache.wicket.spring.injection.annot.SpringBean           
  7.            
  8. import org.apache.wicket.model.CompoundPropertyModel           
  9.            
  10. class MyPage extends WebPage {           
  11.   @SpringBean           
  12.    var ps: ProductService = _          
  13.   val productListView = newListView[Product]("productListView", ps.getAll) {           
  14.            
  15.      def populateItem(item: ListItem[Product]) = {          
  16.       item.setModel(newCompoundPropertyModel[Product](item.getDefaultModelObject))           
  17.            
  18.       item.add(new Label("name"))           
  19.       item.add(new Label("price"))           
  20.     }           
  21.   }           
  22.   add(productListView)           
  23. }           
  24.  

请注意,在创建ProductService对象加载的文件之后使用。此外,请注意该字段被分配到一个下划线(_),Scala编译为不可初始化的,而是留在默认状态。在你将覆盖作为编译之前,执行Spring bean的页面构造。现在,创建在src/main/resources/com/foo/myapp的的mypage.html文件:

 
 
 
  1.            
  2.            
  3.                
  4.                    
  5.                        
  6.                        
  7.                    
  8.                
  9.            
  10.  

#p#

创建ProductService:

右键单击在in the src/main/scala文件夹中的com.foo.myapp包并选择New | Scala的类,然后选择创建ProductService:

 
 
 
  1. package com.foo.myapp           
  2.            
  3. import java.util.List           
  4.            
  5. trait ProductService {           
  6.   def getAll: List[Product]           
  7. }           
  8.  

这是接口。对创造一个DefaultProductService的Scala在同一个包内进行执行操作:

 
 
 
  1. package com.foo.myapp           
  2.            
  3. import javax.persistence.{PersistenceContext, EntityManager}           
  4. import org.springframework.stereotype.{Service}           
  5. importorg.springframework.transaction.annotation.Transactional           
  6.  importorg.springframework.beans.factory.annotation.Autowired          
  7.            
  8.            
  9. @Service           
  10. @Transactional           
  11. class DefaultProductService extends ProductService {           
  12.   @Autowired           
  13.   var products: Products = _           
  14.            
  15.   def getAll = products.getAll           
  16. }           
  17.  

请注意,把它使用类型文件命名为DAO。

创建文件的DAO

要创建的DAO,创建一个名为在同一文件夹:

 
 
 
  1. package com.foo.myapp           
  2.            
  3. import java.util.List           
  4.            
  5. trait Products {           
  6.    def getAll: List[Product]           
  7. }           
  8.  

然后创建在同一文件夹中的执行Scala的DefaultProducts文件:

 
 
 
  1. package com.foo.myapp           
  2.            
  3. import javax.persistence.{PersistenceContext, EntityManager}           
  4. import org.springframework.stereotype.Repository           
  5. import java.util.List           
  6.            
  7. @Repository           
  8. class DefaultProducts extends Products {           
  9.   @PersistenceContext           
  10.   var em: EntityManager = _           
  11.            
  12.   def getAll = {           
  13.     em.createQuery("select p from Product p").getResultList.asInstanceOf[List[Product]]           
  14.   }           
  15. }           
  16.  

#p#

创建entity程序

创建entity程序并将其映射到数据库:

 
 
 
  1. package com.foo.myapp           
  2.            
  3. import javax.persistence.{GeneratedValue, Id, Entity}           
  4.            
  5. @Entity           
  6. class Product {           
  7.   @Id           
  8.   @GeneratedValue           
  9.   var id: Long = _           
  10.   var name: String = _           
  11.   var price: Double = _           
  12. }           
  13.  

创建Wicket的应用程序

***,创建在同一个MyApp的Scala程序:

 
 
 
  1. package com.foo.myapp           
  2.            
  3.  import org.apache.wicket.protocol.http.WebApplication          
  4. importcom.ttdev.wicketpagetest.MockableSpringBeanInjector           
  5.            
  6.            
  7. class MyApp extends WebApplication {           
  8.   def getHomePage = classOf[MyPage]           
  9.            
  10.    override def init = {          
  11.     MockableSpringBeanInjector.installInjector(this)           
  12.            
  13.   }           
  14. }           
  15.  

在这里,您指定为首页我的目录,植入Spring Bean中。

运行应用程序

随着IntelliJ IDEA的版本不断改进,您将嵌入到应用服务器运行您的应用程序。这非常容易,在刚刚创建的测试com.foo.myapp的ManualTest在刚刚创建的测试com.foo.myapp包一类ManualTest/scala文件(不是main/scala文件),以下内容是:

 
 
 
  1. package com.foo.myapp           
  2.            
  3. importcom.ttdev.wicketpagetest.{WebAppJettyConfiguration, WicketAppJettyLauncher}           
  4.            
  5.            
  6. object ManualTest {           
  7.   def main(args: Array[String]) {           
  8.     val l = new WicketAppJettyLauncher           
  9.    &nb

    分享标题:用Java在各种框架下编译Scala项目
    本文来源:http://www.shufengxianlan.com/qtweb/news17/383217.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联