`
waterborn
  • 浏览: 30624 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SCALA+JAVA项目 几种混合编译方法

阅读更多

JAVA开发 ,学一下Scala 语言很快的, 一些JAVA项目部分转SCALA,尝试了几种编译方法,遇到一些问题,不能解决,记录一下。

 

个人习惯用的是Eclipse , 开发Scala 可以装个Scala-IDE插件,

最新版可以直接在Eclipse Marketplace里 Install

 

如果选择其他版本scala , 可以在http://scala-ide.org/download/current.html  找个更新URL “Install New Software”

IDE插件中有个java to scala plugin 功能, 能方便的的JAVA 代码转成scala 代码。 

 

安装m2eclipse-scala 插件

http://scala-ide.org/docs/tutorials/m2eclipse/

 

开始转化一个maven工程的JAVA项目

首先把目录结构先按maven结构规范化, scala 文件放在src/main/java 或者src/main/scala 下面,有时会编译不了,避免不必要麻烦。

 

1. scala-maven-plugin

一开始选择用的是这个插件,后来发现用这个太坑人。

配置

dependencies

      <dependency>
			<groupId>org.springframework.scala</groupId>
			<artifactId>spring-scala_2.10</artifactId>
			<version>1.0.0.RC1</version>
		 <exclusions>
				<exclusion>
					<artifactId>scala-library</artifactId>
					<groupId>org.scala-lang</groupId>
				</exclusion>
			</exclusions> 
		</dependency>
      <dependency>
			<groupId>org.scala-lang</groupId>
			<artifactId>scala-library</artifactId>
			<version>2.10.3</version>
		</dependency>

 

plugins

<plugin>
				<groupId>net.alchim31.maven</groupId>
				<artifactId>scala-maven-plugin</artifactId>
				<version>3.2.0</version>
				<executions>
					<execution>
						<goals>
							<goal>compile</goal>
							<goal>testCompile</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.0.2</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>

 

看一下scala-maven对2.11还未能支持好

http://davidb.github.io/scala-maven-plugin/dependencies.html

 

不过2.10 算是能用, 到此还比较顺利, maven clean packge 就可以了。 

 

换了台机器, 问题来了, 挖掘出一堆错误,
最常见错误的是 java.lang.NoClassDefFoundError: scala/reflect/internal/Trees

Eclipse ,代码,Maven 打包复制过来,maven repo 清空, 还是报错。 

折腾了一晚上,未能解决。

 

2.Ant

参考 Scala Ant Task:http://www.scala-lang.org/old/node/98.html

 


 

	<property file="version.properties" />
	<property file="build.properties" />

	<property name="src" location="src/main/java" />
	<property name="res" location="src/main/resources" />
	<property name="build" location="build" />
	<property name="dist" location="dist" />
	<property name="web" location="src/main/webapp" />


	<target name="init_maven">
		<!--使用Maven2依赖管理 -->
		<path id="maven-ant-tasks.classpath" path="lib/maven-ant-tasks-2.1.0.jar" />
		<typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpathref="maven-ant-tasks.classpath" />

		<!--定义Maven2变量-->
		<artifact:pom id="maven.project" file="pom.xml" />
		<artifact:dependencies pathId="maven.classpath" filesetid="maven.fileset.runtime" useScope="runtime">
			<pom refid="maven.project" />
		</artifact:dependencies>

		<taskdef resource="scala/tools/ant/antlib.xml">
			<classpath>
				<pathelement location="lib/scala-compiler.jar" />
				<pathelement location="lib/scala-library.jar" />
				<pathelement location="lib/scala-reflect.jar" />
			</classpath>
		</taskdef>
	</target>

	<target name="init">
		<!-- Create the time stamp -->
		<tstamp />
		<!-- Create the build directory structure used by compile -->
		<mkdir dir="${build}" />
		<mkdir dir="${dist}" />
	</target>

	<target name="compile" description="compile the source" depends="init_maven">
		<!-- Compile the java code from ${src} into ${build} -->
		<javac srcdir="${src}" destdir="${build}" encoding="UTF-8" nowarn="true" source="1.6" debug="true">
			<classpath refid="maven.classpath" />
		</javac>
		<scalac srcdir="${src}" destdir="${build}" >
			<classpath refid="maven.classpath" />
			<include name="**/*.scala" />
		</scalac>
	</target>

 

3. maven-ant-plugin

ant能跑,就集成在pom文件中吧

 

plugins

<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-antrun-plugin</artifactId>
				<executions>
					<execution>
						<id>scala-compile</id>
						<phase>prepare-package</phase>
						<goals>
							<goal>run</goal>
						</goals>
						<configuration>
							<tasks>
								<property name="build.compiler" value="extJavac" />
								<taskdef resource="scala/tools/ant/antlib.xml" >
									<classpath>
										<pathelement location="lib/scala-compiler.jar" />
										<pathelement location="lib/scala-library.jar" />
										<pathelement location="lib/scala-reflect.jar" />
									</classpath>
								</taskdef>
								<scalac srcdir="src/main/java" destdir="target/classes"
									classpathref="maven.compile.classpath">
									<include name="**/*.scala" />
								</scalac>
							</tasks>
						</configuration>
					</execution>
				</executions>
			</plugin>

 

 

 

 

 

 

  • 大小: 199.4 KB
  • 大小: 31 KB
分享到:
评论

相关推荐

    SpringBoot + SpringData Jpa + Scala + Mysql(java+Scala混编)

    在Java项目中使用Scala,通常被称为Java和Scala的混编。这种混编允许开发团队在已有的Java项目中逐渐引入Scala代码,以利用其优势,同时保持与现有Java代码的兼容性。在实际应用中,可能会在服务端逻辑或者特定组件...

    scala和java混合编译

    在Java和Scala混合编译的场景下,我们需要引入两个关键的Maven插件:`maven-compiler-plugin`用于编译Java代码,`maven-scala-plugin`用于编译Scala代码。这两个插件需要在`pom.xml`中正确配置,确保它们能够协同...

    scala + mybatis 数据库查询

    Scala是一种强大的多范式编程语言,它结合了面向对象和函数式编程的特性。MyBatis则是一款流行的Java持久层框架,主要用于简化数据库操作。在本项目中,"scala + mybatis 数据库查询",我们将探讨如何将Scala与...

    基于 Spark Netty Rpc 框架,重新实现的一个 Netty Rpc 框架 ( scala + java ).zip

    这个框架的特色在于它结合了Scala和Java两种编程语言,使得开发者可以利用这两种语言的优势来构建高效、可扩展的服务。 Netty是一个高性能、异步事件驱动的网络应用框架,常用于构建高并发、低延迟的服务器。在RPC...

    Scala+maven安装方法.docx

    Scala+maven安装方法 Scala 是一种基于 Java 平台的编程语言,具有很高的扩展性和灵活性。为了方便开发者快速搭建 Scala 环境,本文将介绍 Scala+maven 的安装方法,并对 Scala IDE 的下载和配置进行详细的讲解。 ...

    spring boot + scala + spark http驱动spark计算

    2. **Scala**: Scala是一种多范式的编程语言,结合了面向对象和函数式编程的特点。它运行在Java虚拟机(JVM)上,可以无缝集成Java库,因此非常适合构建复杂、高性能的分布式系统。在大数据领域,Scala由于其强大的...

    基于java+scala+Python+spark实现的图书推荐系统的设计与实现+详细文档+全部资料(高分毕业设计).zip

    基于java+scala+Python+spark实现的图书推荐系统的设计与实现+详细文档+全部资料(高分毕业设计).zip基于java+scala+Python+spark实现的图书推荐系统的设计与实现+详细文档+全部资料(高分毕业设计).zip ...

    基于Java+Scala+Spark的图书推荐系统源码+详细文档+全部数据资料 高分项目.zip

    基于Java+Scala+Spark的图书推荐系统源码+详细文档+全部数据资料 高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的...

    scala-java8-compat_2.11-0.7.0-API文档-中英对照版.zip

    赠送jar包:scala-java8-compat_2.11-0.7.0.jar; 赠送原API文档:scala-java8-compat_2.11-0.7.0-javadoc.jar; 赠送源代码:scala-java8-compat_2.11-0.7.0-sources.jar; 赠送Maven依赖信息文件:scala-java8-...

    scala-java8-compat_2.11-0.7.0-API文档-中文版.zip

    赠送jar包:scala-java8-compat_2.11-0.7.0.jar; 赠送原API文档:scala-java8-compat_2.11-0.7.0-javadoc.jar; 赠送源代码:scala-java8-compat_2.11-0.7.0-sources.jar; 赠送Maven依赖信息文件:scala-java8-...

    sbt+scala+idea安装配置创建导入sbt项目

    ### sbt + Scala + IDEA 安装配置及创建导入 sbt 项目的详细步骤 #### 一、环境搭建 本文档将详细介绍如何在 Windows 10 和 JDK 1.8 的环境下,搭建完整的 Scala + sbt + IntelliJ IDEA 开发环境。这对于初学者来...

    java+hadopp+scala+spark配置win10版

    在本压缩包中,我们关注的是Java、Hadoop、Scala和Spark这四个技术在Windows 10环境下的配置。这些工具广泛应用于大数据处理和分析领域,尤其是Spark在现代数据科学中扮演了重要角色。让我们逐一深入理解这些技术...

    基于Scala的Spark学习项目设计源码

    项目包含95个文件,主要使用Scala和Java编程语言。文件类型包括80个Scala源代码文件、4个XML配置文件、3个TXT文档、2个Markdown文档、2个Java源代码文件、1个GIT忽略文件、1个日志文件、1个JSON配置文件和1个...

    xmljava系统源码-SSM:Gradle+SpringMVC+Scala+Java+Druid+Quartz完成对Java和Scala共同

    ##Gradle+Scala+Java+SpringMVC Web应用解决方案 ###框架组成(Project Architecture) Gradle &gt; &gt; finished &gt; 2016-10-23 Gretty Integration&gt; Server Hot Deploy Scheme&gt; &gt; finished &gt; 2016-11-05 Spring 4.25 ...

    springboot+scala+react

    在本项目中,"springboot+scala+react"的组合为我们提供了一个现代Web应用程序的开发框架,结合了Spring Boot的强大后端能力、Scala的高效编程语法以及React的前端交互优势。下面将详细介绍这三个关键技术及其在项目...

    spark core、spark sql以及spark streaming 的Scala、java项目混合框架搭建以及大数据案例

    本项目涉及的核心知识点包括Spark Core、Spark SQL和Spark Streaming,同时结合了Scala和Java编程语言,以及Maven构建工具,实现了混合框架的搭建。下面将详细阐述这些关键点。 1. **Spark Core**:作为Spark的基础...

    play2+scala+mongodb demo示例

    【play2+scala+mongodb demo示例】是一个用于学习如何集成和使用Play Framework 2、Scala编程语言以及MongoDB数据库的实战项目。这个项目旨在帮助初学者理解这三者之间的协同工作,通过创建一个基本的CRUD(创建、...

    hadoop+scala+spakr配置

    hadoop+scala+spakr配置,步骤详细,值得收藏。

    基于maven的scala与java相互调用的简单实例

    在Maven项目中,Java可以轻松地调用Scala编译后的字节码,因为它们都是Java虚拟机(JVM)上的语言。 最后,为了将项目打包成可执行的jar文件,我们需要在`pom.xml`中添加`maven-jar-plugin`并配置`mainClass`属性:...

Global site tag (gtag.js) - Google Analytics