Skip to content

Commit 4c0c106

Browse files
committed
Get the build into shape for a Scala module
- add the scala-modules SBT plugin - configure OSGi package export - Check that SBT is running on Java8, rather than waiting for cryptic build errors. - convert `LambdaTest` to a JUnit test.
1 parent 89a660e commit 4c0c106

File tree

4 files changed

+42
-3
lines changed

4 files changed

+42
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ TODO
4040
#### Running Examples
4141

4242
```
43-
% (export JAVA_HOME=`java_home 1.8`; export PATH=$JAVA_HOME/bin:$PATH; sbt 'test:runMain scala.compat.jdk8.LambdaTest')
43+
% (export JAVA_HOME=`java_home 1.8`; export PATH=$JAVA_HOME/bin:$PATH; sbt test)
4444
```
4545

4646
### Future work

build.sbt

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,36 @@
1-
scalaVersion := "2.10.3"
1+
import com.typesafe.tools.mima.plugin.{MimaPlugin, MimaKeys}
2+
3+
scalaModuleSettings
4+
5+
scalaVersion := "2.10.4"
6+
7+
snapshotScalaBinaryVersion := "2.10.4"
8+
9+
// TODO this project can be cross build against 2.11 and 2.10, express that here.
210

311
organization := "org.scala-lang.modules"
412

513
name := "scala-compat-jdk8"
614

15+
// important!! must come here (why?)
16+
scalaModuleOsgiSettings
17+
18+
OsgiKeys.exportPackage := Seq(s"scala.compat.jdk8.*;version=${version.value}")
19+
20+
libraryDependencies += "junit" % "junit" % "4.11" % "test"
21+
22+
libraryDependencies += "com.novocode" % "junit-interface" % "0.10" % "test"
23+
24+
MimaPlugin.mimaDefaultSettings
25+
26+
MimaKeys.previousArtifact := None
27+
28+
// run mima during tests
29+
test in Test := {
30+
MimaKeys.reportBinaryIssues.value
31+
(test in Test).value
32+
}
33+
734
sourceGenerators in Compile <+= sourceManaged in Compile map { dir =>
835
def write(name: String, content: String) = {
936
val f = dir / "java" / "scala" / "compat" / "jdk8" / s"${name}.java"
@@ -21,3 +48,10 @@ sourceGenerators in Test <+= sourceManaged in Test map { dir =>
2148
}
2249
Seq(write("TestApi", CodeGen.testApi))
2350
}
51+
52+
initialize := {
53+
val _ = initialize.value
54+
val specVersion = sys.props("java.specification.version")
55+
if (Set("1.5", "1.6", "1.7") contains specVersion)
56+
sys.error("Java 8 or higher is required for this project.")
57+
}

project/plugins.sbt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
addSbtPlugin("org.scala-lang.modules" % "scala-module-plugin" % "1.0.2")
2+
3+
addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.1.6")

src/test/java/scala/compat/jdk8/LambdaTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
import scala.runtime.*;
77
import static scala.compat.jdk8.TestAPI.*;
88
import static scala.compat.jdk8.JFunction.*;
9+
import org.junit.Test;
910

1011
public class LambdaTest {
11-
public static void main(String[] args) {
12+
@Test
13+
public static void lambdaDemo() {
1214
// Not allowed with Scala 2.10 nor 2.11
1315
// "incompatible types: Function1 is not a functional interface"
1416
// scala.Function1<String, String> f = (String s) -> s;

0 commit comments

Comments
 (0)