Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to make rules_scala use scala-2.10? #173

Closed
GinFungYJF opened this issue Mar 28, 2017 · 8 comments
Closed

How to make rules_scala use scala-2.10? #173

GinFungYJF opened this issue Mar 28, 2017 · 8 comments

Comments

@GinFungYJF
Copy link

Hi! How to make rules_scala use scala-2.10? Does it need a hacky workaround?

@johnynek
Copy link
Member

It does now, but we are very close to making this well supported. See #170 for a related discussion.

Since we merged #171 this can be done pretty easily. I can coach you on a PR if you are interested.

@GinFungYJF
Copy link
Author

Thanks for the reply. And yes, I am interested in it.

@johnynek
Copy link
Member

if you look in scala.bzl, we need to remove all references to @scala// and instead use //external:... some name like we have in other cases.

Once we do that, you can change the bindings of those names to the 2.10 jars, and it should just work.

See: https://github.com/bazelbuild/rules_scala/blob/master/scala/scala.bzl#L750 for repositories and then just remove all references to @scala in the repo and instead use external references set up by bind. Lastly, make a scala210repositories function that points those jars at different values than the 2.11 ones we have. That should work...

@GinFungYJF
Copy link
Author

GinFungYJF commented Mar 30, 2017

Thanks for the guide! According to your guide, I try to implement it. Here is the code:
GinFungYJF@87ac624
But I think I do not quite understand this way because when I build my project, it complains:

~/XX# bazel build sql/hbase
INFO: Found 1 target...
ERROR: /root/XX/sql/hbase/BUILD:21:1: scala //sql/hbase:hbase failed: Process exited with status 1 [sandboxed].
error: scala.reflect.internal.FatalError: object DoubleRef does not have a member create
        at scala.reflect.internal.Definitions$DefinitionsClass.scala$reflect$internal$Definitions$DefinitionsClass$$fatalMissingSymbol(Definitions.scala:1186)
        at scala.reflect.internal.Definitions$DefinitionsClass.getMember(Definitions.scala:1203)
        at scala.reflect.internal.Definitions$DefinitionsClass.getMemberMethod(Definitions.scala:1238)
        at scala.tools.nsc.transform.LambdaLift$$anonfun$scala$tools$nsc$transform$LambdaLift$$refCreateMethod$1.apply(LambdaLift.scala:41)
        at scala.tools.nsc.transform.LambdaLift$$anonfun$scala$tools$nsc$transform$LambdaLift$$refCreateMethod$1.apply(LambdaLift.scala:41)
        at scala.reflect.internal.util.Collections$$anonfun$mapFrom$1.apply(Collections.scala:182)
        at scala.reflect.internal.util.Collections$$anonfun$mapFrom$1.apply(Collections.scala:182)
        at scala.collection.immutable.List.map(List.scala:273)
        at scala.reflect.internal.util.Collections$class.mapFrom(Collections.scala:182)
        at scala.reflect.internal.SymbolTable.mapFrom(SymbolTable.scala:16)
        at scala.tools.nsc.transform.LambdaLift.scala$tools$nsc$transform$LambdaLift$$refCreateMethod$lzycompute(LambdaLift.scala:41)
        at scala.tools.nsc.transform.LambdaLift.scala$tools$nsc$transform$LambdaLift$$refCreateMethod(LambdaLift.scala:40)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.postTransform(LambdaLift.scala:489)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:544)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:56)
        at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2589)
        at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2587)
        at scala.collection.immutable.List.loop$1(List.scala:173)
        at scala.collection.immutable.List.mapConserve(List.scala:189)
        at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:562)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:56)
        at scala.reflect.internal.Trees$class.itransform(Trees.scala:1366)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
        at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.scala$reflect$internal$Trees$UnderConstructionTransformer$$super$transform(ExplicitOuter.scala:219)
        at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1705)
        at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:536)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:544)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:56)
        at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1363)
        at scala.reflect.internal.Trees$$anonfun$itransform$2.apply(Trees.scala:1361)
        at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:17)
        at scala.reflect.internal.Trees$class.itransform(Trees.scala:1360)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
        at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.scala$reflect$internal$Trees$UnderConstructionTransformer$$super$transform(ExplicitOuter.scala:219)
        at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1705)
        at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:536)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:544)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:56)
        at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2589)
        at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2587)
        at scala.collection.immutable.List.loop$1(List.scala:173)
        at scala.collection.immutable.List.mapConserve(List.scala:189)
        at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:562)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:56)
        at scala.reflect.internal.Trees$class.itransform(Trees.scala:1404)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:40)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:40)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:40)
        at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:40)
        at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.scala$reflect$internal$Trees$UnderConstructionTransformer$$super$transform(ExplicitOuter.scala:219)
        at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1705)
        at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:536)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:544)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:56)
        at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2563)
        at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1408)
        at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1407)
        at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:17)
        at scala.reflect.internal.Trees$class.itransform(Trees.scala:1406)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
        at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.scala$reflect$internal$Trees$UnderConstructionTransformer$$super$transform(ExplicitOuter.scala:219)
        at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1705)
        at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:536)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:544)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:56)
        at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2589)
        at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2587)
        at scala.collection.immutable.List.loop$1(List.scala:173)
        at scala.collection.immutable.List.mapConserve(List.scala:189)
        at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2587)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:562)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformStats(LambdaLift.scala:56)
        at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1426)
        at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1426)
        at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:25)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:17)
        at scala.reflect.internal.Trees$class.itransform(Trees.scala:1425)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:16)
        at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2555)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:40)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$2.apply(TypingTransformers.scala:42)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$2.apply(TypingTransformers.scala:42)
        at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2600)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:30)
        at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:42)
        at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.scala$reflect$internal$Trees$UnderConstructionTransformer$$super$transform(ExplicitOuter.scala:219)
        at scala.reflect.internal.Trees$UnderConstructionTransformer$class.transform(Trees.scala:1705)
        at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:291)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.preTransform(LambdaLift.scala:536)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:544)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transform(LambdaLift.scala:56)
        at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:147)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.scala$tools$nsc$transform$LambdaLift$LambdaLifter$$super$transformUnit(LambdaLift.scala:568)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter$$anonfun$transformUnit$1.apply(LambdaLift.scala:568)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter$$anonfun$transformUnit$1.apply(LambdaLift.scala:568)
        at scala.reflect.internal.SymbolTable.enteringPhase(SymbolTable.scala:235)
        at scala.reflect.internal.SymbolTable.exitingPhase(SymbolTable.scala:256)
        at scala.tools.nsc.transform.LambdaLift$LambdaLifter.transformUnit(LambdaLift.scala:567)
        at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
        at scala.tools.nsc.Global$GlobalPhase$$anonfun$applyPhase$1.apply$mcV$sp(Global.scala:440)
        at scala.tools.nsc.Global$GlobalPhase.withCurrentUnit(Global.scala:431)
        at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:440)
        at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:398)
        at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:398)
        at scala.collection.Iterator$class.foreach(Iterator.scala:893)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
        at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:398)
        at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1501)
        at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1486)
        at scala.tools.nsc.Global$Run.compileSources(Global.scala:1481)
        at scala.tools.nsc.Global$Run.compile(Global.scala:1582)
        at scala.tools.nsc.Driver.doCompile(Driver.scala:32)
        at scala.tools.nsc.MainClass.doCompile(Main.scala:23)
        at scala.tools.nsc.Driver.process(Driver.scala:51)
        at io.bazel.rulesscala.scalac.ScalacProcessor.compileScalaSources(ScalacProcessor.java:207)
        at io.bazel.rulesscala.scalac.ScalacProcessor.processRequest(ScalacProcessor.java:77)
        at io.bazel.rulesscala.worker.GenericWorker.run(GenericWorker.java:125)
        at io.bazel.rulesscala.scalac.ScalaCInvoker.main(ScalaCInvoker.java:42)
6 warnings found
one error found
java.lang.RuntimeException: Build failed
        at io.bazel.rulesscala.scalac.ScalacProcessor.compileScalaSources(ScalacProcessor.java:226)
        at io.bazel.rulesscala.scalac.ScalacProcessor.processRequest(ScalacProcessor.java:77)
        at io.bazel.rulesscala.worker.GenericWorker.run(GenericWorker.java:125)
        at io.bazel.rulesscala.scalac.ScalaCInvoker.main(ScalaCInvoker.java:42)
Use --strategy=Scalac=standalone to disable sandboxing for the failing actions.
Target //sql/hbase:hbase failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 20.651s, Critical Path: 16.80s

Any suggestions?

@mavenlin
Copy link

mavenlin commented Apr 2, 2017

After reading the code, there's one thing confusing me. Why do we need to compile a scalac in src/java/io/bazel/rulesscale/scalac when there is already a bin/scalac? I was trying to work out the 2.10 version, but found that the scalac java code couldn't compile on 2.10 due to the scala.Console$.MODULE$ part, which doesn't exist in 2.10.

@sdtwigg
Copy link
Contributor

sdtwigg commented Apr 2, 2017 via email

@GinFungYJF
Copy link
Author

Actually I have found that, maybe the error above is just because my code uses the 2.10 jars but still invokes the scalac which is compiled on scala-2.11 in src/java/io/bazel/rulesscale/scalac. And I do some rough change on the code to make src/java/io/bazel/rulesscale/scalac use scala-2.10. Here is the code:
GinFungYJF@82b0be5
But it still complains:

~/XX# bazel build streaming
INFO: Found 1 target...
ERROR: /root/XX/streaming/BUILD:21:1: scala //streaming:streaming failed: Process exited with status 1 [sandboxed].
error: error while loading JsonInclude$Include, class file 'bazel-out/local-fastbuild/genfiles/external/compile_com_fasterxml_jackson_core_jackson_annotations_2_4_0/jar/_ijar/jar/external/compile_com_fasterxml_jackson_core_jackson_annotations_2_4_0/jar/jackson-annotations-2.4.0-ijar.jar(com/fasterxml/jackson/annotation/JsonInclude$Include.class)' is broken
(class java.lang.UnsupportedOperationException/addChild inapplicable for <none>)
warning: While parsing annotations in bazel-out/local-fastbuild/bin/core/core_ijar.jar(org/apache/spark/rdd/RDDOperationScope.class), could not find NON_NULL in enum object JsonInclude$Include.
This is likely due to an implementation restriction: an annotation argument cannot refer to a member of the annotated class (SI-7014).
error: error while loading JsonTypeInfo$Id, class file 'bazel-out/local-fastbuild/genfiles/external/compile_com_fasterxml_jackson_core_jackson_annotations_2_4_0/jar/_ijar/jar/external/compile_com_fasterxml_jackson_core_jackson_annotations_2_4_0/jar/jackson-annotations-2.4.0-ijar.jar(com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class)' is broken
(class java.lang.UnsupportedOperationException/addChild inapplicable for <none>)
warning: While parsing annotations in bazel-out/local-fastbuild/bin/core/core_ijar.jar(org/apache/spark/scheduler/SparkListenerEvent.class), could not find CLASS in enum object JsonTypeInfo$Id.
This is likely due to an implementation restriction: an annotation argument cannot refer to a member of the annotated class (SI-7014).
warning: While parsing annotations in bazel-out/local-fastbuild/bin/core/core_ijar.jar(org/apache/spark/scheduler/SparkListenerEvent.class), could not find PROPERTY in enum <none>.
This is likely due to an implementation restriction: an annotation argument cannot refer to a member of the annotated class (SI-7014).
three warnings found
two errors found
three warnings found
two errors found
java.lang.RuntimeException: Build failed
        at io.bazel.rulesscala.scalac.ScalacProcessor.compileScalaSources(ScalacProcessor.java:229)
        at io.bazel.rulesscala.scalac.ScalacProcessor.processRequest(ScalacProcessor.java:78)
        at io.bazel.rulesscala.worker.GenericWorker.run(GenericWorker.java:125)
        at io.bazel.rulesscala.scalac.ScalaCInvoker.main(ScalaCInvoker.java:42)
Use --strategy=Scalac=standalone to disable sandboxing for the failing actions.
Target //streaming:streaming failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 12.158s, Critical Path: 11.84s

@liucijus
Copy link
Collaborator

Closing since rules_scala does not support 2.10 anymore

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants