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

本文提供了一种教程,演示如何在Java环境下,利用IntelliJ IDEA 9.0.x(社区版)配合Maven,编译和运行一个包含Scala组件的Java EE 6 Web应用。主要涉及的框架包括Spring、Hibernate/JPA、Wicket,并介绍了如何设置IDE、创建Maven项目、配置web.xml、定义Spring bean以及创建Wicket页面。
摘要由CSDN通过智能技术生成

【51CTO编译】51CTO曾经在“与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的汇编语言:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

com.foo

myapp

war

1.0-SNAPSHOT

myapp Java EE 6 Webapp

http://maven.apache.org

3.0.3.RELEASE

java.net2

Repository hosting the jee6 artifacts

http://download.java.net/maven/2

scala-tools.org

Scala-tools Maven2 Repository

http://scala-tools.org/repo-releases

wpt-release

http://wicketpagetest.sourceforge.net/m2-repo/releases

wpt-snapshot

http://wicketpagetest.sourceforge.net/m2-repo/snapshots

scala-tools.org

Scala-tools Maven2 Repository

http://scala-tools.org/repo-releases

org.springframework

spring-context

${spring.version}

org.springframework

spring-core

${spring.version}

org.springframework

spring-web

${spring.version}

org.springframework

spring-orm

${spring.version}

com.h2database

h2

1.2.120

org.hibernate

hibernate-entitymanager

3.4.0.GA

org.springframework

spring-orm

com.ttdev

wpt-core

1.5.2-SNAPSHOT

test

com.ttdev

wpt-runtime-spring

1.5.2-SNAPSHOT

javax

javaee-web-api

6.0

provided

junit

junit

3.8.2

test

org.scala-lang

scala-library

2.8.0.RC3

org.apache.wicket

wicket

1.4.9

org.slf4j

slf4j-log4j12

1.4.2

org.apache.maven.plugins

maven-compiler-plugin

2.0.2

org.scala-tools

maven-scala-plugin

2.9.1

org.apache.maven.plugins

maven-compiler-plugin

compile

compile

1.6

1.6

org.apache.maven.plugins

maven-war-plugin

2.1-beta-1

false

org.scala-tools

maven-scala-plugin

scala-compile-first

process-resources

add-source

compile

scala-test-compile

process-test-resources

testCompile

myapp

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

web.xml中设置

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

xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

f2

org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter

f1

org.apache.wicket.protocol.http.WicketFilter

applicationClassName

com.foo.myapp.MyApp

f1

/app/*

f2

/*

contextConfigLocation

classpath:/beans.xml

org.springframework.web.context.ContextLoaderListener

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

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

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

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

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/persistencehttp://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"

version="2.0">

org.hibernate.ejb.HibernatePersistence

/persistence>

创建Wicket的页面

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

package com.foo.myapp

import org.apache.wicket.markup.html._

import basic.Label

import list.{ListItem, ListView}

importorg.apache.wicket.spring.injection.annot.SpringBean

import org.apache.wicket.model.CompoundPropertyModel

class MyPage extends WebPage {

@SpringBean

var ps: ProductService = _

val productListView = newListView[Product]("productListView", ps.getAll) {

def populateItem(item: ListItem[Product]) = {

item.setModel(newCompoundPropertyModel[Product](item.getDefaultModelObject))

item.add(new Label("name"))

item.add(new Label("price"))

}

}

add(productListView)

}

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

HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

创建ProductService:

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

package com.foo.myapp

import java.util.List

trait ProductService {

def getAll: List[Product]

}

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

package com.foo.myapp

import javax.persistence.{PersistenceContext, EntityManager}

import org.springframework.stereotype.{Service}

importorg.springframework.transaction.annotation.Transactional

importorg.springframework.beans.factory.annotation.Autowired

@Service

@Transactional

class DefaultProductService extends ProductService {

@Autowired

var products: Products = _

def getAll = products.getAll

}

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

创建文件的DAO

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

package com.foo.myapp

import java.util.List

trait Products {

def getAll: List[Product]

}

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

package com.foo.myapp

import javax.persistence.{PersistenceContext, EntityManager}

import org.springframework.stereotype.Repository

import java.util.List

@Repository

class DefaultProducts extends Products {

@PersistenceContext

var em: EntityManager = _

def getAll = {

em.createQuery("select p from Product p").getResultList.asInstanceOf[List[Product]]

}

}

创建entity程序

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

package com.foo.myapp

import javax.persistence.{GeneratedValue, Id, Entity}

@Entity

class Product {

@Id

@GeneratedValue

var id: Long = _

var name: String = _

var price: Double = _

}

创建Wicket的应用程序

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

package com.foo.myapp

import org.apache.wicket.protocol.http.WebApplication

importcom.ttdev.wicketpagetest.MockableSpringBeanInjector

class MyApp extends WebApplication {

def getHomePage = classOf[MyPage]

override def init = {

MockableSpringBeanInjector.installInjector(this)

}

}

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

运行应用程序

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

package com.foo.myapp

importcom.ttdev.wicketpagetest.{WebAppJettyConfiguration, WicketAppJettyLauncher}

object ManualTest {

def main(args: Array[String]) {

val l = new WicketAppJettyLauncher

l.startAppInJetty(new WebAppJettyConfiguration)

}

}

要运行的应用程序,首先需要运行数据库服务器上的H2程序。所以,在http://www.h2database.com下载和解压。然后变成h2/bin和运行h2.bat(或在Linux上h2.sh)。ManualTest是在IDEA的编辑器上,在IDEA选择运行DEA。它将运行ManualTest,Jetty的运行您的应用程序。

为了测试它,请尝试通过在浏览器http://localhost:8888/app。

不知道各位感觉如何。感谢各位支持!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值