Maven scala和java混合打包方式

Maven scala和java混合打包 删除pom文件中的sourceDirectory和testSourceDirectory 两个标签 如果scala和j

Maven scala和java混合打包

删除pom文件中的sourceDirectory和testSourceDirectory 两个标签

如果scala和java源码在同一个源目录下可以忽略,即不删除。

添加打包插件

1)java打包插件:

<!-- 这是个编译java代码的 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.0</version>
    <configuration>
        <source>6</source>
        <target>6</target>
        <encoding>UTF-8</encoding>
    </configuration>
    <executions>
        <execution>
            <phase>compile</phase>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

2)scala打包插件:

<!-- 这是个编译scala代码的 -->
<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>scala-maven-plugin</artifactId>
    <version>3.2.1</version>
    <executions>
        <execution>
            <id>scala-compile-first</id>
            <phase>process-resources</phase>
            <goals>
                <goal>add-source</goal>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

3)将依赖也进行打包

<!--maven-assembly-plugin不能打包spring Framework框架的项目,可以使用maven-shade-plugin插件-->
<plugin>  
    <groupId>org.apache.maven.plugins</groupId>  
    <artifactId>maven-assembly-plugin</artifactId>  
    <version>2.5.5</version>  
    <configuration>  
        <archive>  
            <manifest>  
                <mainClass>com.xxg.Main</mainClass>  
            </manifest>  
        </archive>  
        <descriptorRefs>  
            <descriptorRef>jar-with-dependencies</descriptorRef>  
        </descriptorRefs>  
    </configuration>  
    <executions>  
        <execution>  
            <id>make-assembly</id>  
            <phase>package</phase>  
            <goals>  
                <goal>single</goal>  
            </goals>  
        </execution>  
    </executions>  
</plugin>

4)自定义包名:

<!--在build的标签内输入finalName标签,标签的内容就是自定义的包名-->
<finalName>ROOT</finalName>

5)打包命令:

mvn clean package -DskipTests

scala和java方法的相互调用

在Scala中调用java的方法,很简单,直接导入传递参数就可以进行调用了。

但是在Java中调用Scala的方法呢?

经过测试,也是很简单,静态方法直接传递参数,就可以调用了,非静态的方法,使用对象也可以调用方法。

具体如下:

1.首先是静态方法

object ScalaObjectDemo extends  App {
    println("hello cc i miss you very much");
    def say(name:String){
        println(name)
    }
    /**
      * 先去调用java方法
      * @return
      */
    def say3(): Int ={
        println("这里是scala的方法了")
        var tmp=JavaDemo.say2("4");
        println(tmp);
        tmp
    }
}

2.JAVA中调用Scala的方法

public class JavaDemo {
    public static void main(String[] args) {
        ScalaObjectDemo.main(new String[]{});
        ScalaObjectDemo.say("cc ");
        //测试反复的方法调用
        int say3 = ScalaObjectDemo.say3();
        System.out.println(say3);
    }
    public static int say2(String age){
        System.out.println("这里是java的static 方法了"+age);
        return Integer.parseInt(age);
    }
}

3.Scala中的非静态方法

class ScalaClassDemo {
  def hi(name:String):Int={
    println(name)
    1
  }
}

4.Java中的调用

int zhaojun = new ScalaClassDemo().hi("cc");
System.out.println(zhaojun);

经过测试全部能正常运行。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持好代码网。

您可能有感兴趣的文章
IntelliJ IDEA下Maven创建Scala项目的方法步骤

Idea中添加Maven项目支持scala的详细步骤

IntelliJ IDEA中Scala、sbt、maven配置好代码教程

Java之Maven工程打包jar

Maven工程打包jar的多种方式