scrooge icon indicating copy to clipboard operation
scrooge copied to clipboard

Can not compile scrooge generated code

Open QuantumBear opened this issue 8 years ago • 9 comments

I try to use scrooge to compile thrift files to Scala files, but get lots of compile errors even I use the code in demos/scrooge-maven-demo.

Expected behavior

Build success with mvn clean install command.

Actual behavior

Get lots of compile erros

Here is error log when I compile scrooge-maven-demo.

[ERROR] /home/sili/code/scrooge/demos/scrooge-maven-demo/target/generated-sources/thrift/scrooge/com/twitter/mydemo/renamed/UserService.scala:9: error: object HasThriftStructCodec3 is not a member of package com.twitter.scrooge [ERROR] import com.twitter.scrooge.{ [ERROR] ^ [ERROR] /home/sili/code/scrooge/demos/scrooge-maven-demo/target/generated-sources/thrift/scrooge/com/twitter/mydemo/renamed/User.scala:9: error: object HasThriftStructCodec3 is not a member of package com.twitter.scrooge [ERROR] import com.twitter.scrooge.{ [ERROR] ^ [ERROR] /home/sili/code/scrooge/demos/scrooge-maven-demo/target/generated-sources/thrift/scrooge/com/twitter/mydemo/renamed/User.scala:353: error: not found: type HasThriftStructCodec3 [ERROR] with HasThriftStructCodec3[User] [ERROR] ^ [ERROR] /home/sili/code/scrooge/demos/scrooge-maven-demo/src/main/scala/com/twitter/example/Demo.scala:37: error: overloaded method value stack with alternatives: [ERROR] [Req1, Rep1](server: com.twitter.finagle.server.StackBasedServer[Req1,Rep1])com.twitter.finagle.builder.ServerBuilder[Req1,Rep1,com.twitter.finagle.builder.ServerConfig.Yes,Nothing,Nothing] [ERROR] [Req1, Rep1](mk: com.twitter.finagle.Stack.Params => com.twitter.finagle.Server[Req1,Rep1])com.twitter.finagle.builder.ServerBuilder[Req1,Rep1,com.twitter.finagle.builder.ServerConfig.Yes,Nothing,Nothing]

And here is the error log when compile my project.

[ERROR] /home/sili/workspace/new-sessionlog-proto/target/generated-sources/thrift/scrooge/com/mediav/data/log/unitedlog/ShowInfo.scala:9: object HasThriftStructCodec3 is not a member of package com.twitter.scrooge [ERROR] import com.twitter.scrooge.{ [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/target/generated-sources/thrift/scrooge/com/mediav/data/log/unitedlog/ShowInfo.scala:3045: not found: type HasThriftStructCodec3 [ERROR] with HasThriftStructCodec3[ShowInfo] [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/src/main/scala/com/mvad/sessionlog/newSessionlog.scala:32: value isSetFraudInfo is not a member of com.mediav.data.log.unitedlog.ShowInfo [ERROR] if (showInfo.isSetFraudInfo [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/target/generated-sources/thrift/scrooge/com/mediav/data/log/unitedlog/FraudInfo.scala:9: object HasThriftStructCodec3 is not a member of package com.twitter.scrooge [ERROR] import com.twitter.scrooge.{ [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/target/generated-sources/thrift/scrooge/com/mediav/data/log/unitedlog/FraudInfo.scala:569: not found: type HasThriftStructCodec3 [ERROR] with HasThriftStructCodec3[FraudInfo] [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/src/main/scala/com/mvad/sessionlog/newSessionlog.scala:34: value fraudReasons is not a member of Option[com.mediav.data.log.unitedlog.FraudInfo] [ERROR] showInfo.fraudInfo.fraudReasons.mkString(",") [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/target/generated-sources/thrift/scrooge/com/mediav/data/log/unitedlog/UnitedEvent.scala:9: object HasThriftStructCodec3 is not a member of package com.twitter.scrooge [ERROR] import com.twitter.scrooge.{ [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/target/generated-sources/thrift/scrooge/com/mediav/data/log/unitedlog/UnitedEvent.scala:1096: not found: type HasThriftStructCodec3 [ERROR] with HasThriftStructCodec3[UnitedEvent] [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/src/main/scala/com/mvad/sessionlog/newSessionlog.scala:44: trait UnitedEvent is abstract; cannot be instantiated [ERROR] Try(ThriftUtils.detectAndDeserialize(ueBytes, new UnitedEvent())) match { [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/src/main/scala/com/mvad/sessionlog/newSessionlog.scala:45: too many arguments for method apply: (x: A)Some[A] in object Some [ERROR] case Success(ue) => Some(ue.getEventType.type,ue) [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/target/generated-sources/thrift/scrooge/com/mediav/data/log/unitedlog/AdSlotClickInfo.scala:9: object HasThriftStructCodec3 is not a member of package com.twitter.scrooge [ERROR] import com.twitter.scrooge.{ [ERROR] ^ [ERROR] /home/sili/workspace/new-sessionlog-proto/target/generated-sources/thrift/scrooge/com/mediav/data/log/unitedlog/AdSlotClickInfo.scala:363: not found: type HasThriftStructCodec3 [ERROR] with HasThriftStructCodec3[AdSlotClickInfo] [ERROR] ^

Steps to reproduce the behavior

Add this configuration to my pom.xml then run mvn clean install

<dependency>
  <groupId>com.twitter</groupId>
  <artifactId>scrooge-core_${scala.binary.version}</artifactId>
  <version>4.6.0</version>
  <exclusions>
    <exclusion>
      <groupId>org.apache.thrift</groupId>
      <artifactId>libthrift</artifactId>
    </exclusion>
  </exclusions>
</dependency>

Add this plugin configuration.

 <plugin>
    <groupId>com.twitter</groupId>
    <artifactId>scrooge-maven-plugin</artifactId>
    <version>4.12.0</version>
    <configuration>
      <thriftNamespaceMappings>
        <thriftNamespaceMapping>
          <from>com.mediav.data.log.unitedlog</from>
          <to>com.mediav.data.log.unitedlog</to>
        </thriftNamespaceMapping>
      </thriftNamespaceMappings>
      <language>scala</language>
      <buildExtractedThrift>false</buildExtractedThrift>
    </configuration>
    <executions>
      <execution>
        <id>thrift-sources</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>compile</goal>
        </goals>
      </execution>
      <execution>
        <id>thrift-test-sources</id>
        <phase>generate-test-sources</phase>
        <goals>
          <goal>testCompile</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

QuantumBear avatar Dec 13 '16 09:12 QuantumBear

@QuantumBear having the same problem here, did you find a solution?

filipesabella avatar May 04 '17 10:05 filipesabella

Looks like this issue is from using a rather outdated version of scrooge. Try using the same version of scrooge-core as you're using with the plugin.

nepthar avatar May 04 '17 21:05 nepthar

run command 'mvn clean install' with latest trunk code.

[ERROR] /home/sili/code/scrooge/demos/scrooge-maven-demo/src/main/scala/com/twitter/example/Demo.scala:14: error: overloaded method value hosts with alternatives: [ERROR] (address: java.net.InetSocketAddress)com.twitter.finagle.builder.ClientBuilder[Nothing,Nothing,com.twitter.finagle.builder.ClientConfig.Yes,Nothing,Nothing] [ERROR] (sockaddrs: Seq[java.net.InetSocketAddress])com.twitter.finagle.builder.ClientBuilder[Nothing,Nothing,com.twitter.finagle.builder.ClientConfig.Yes,Nothing,Nothing] [ERROR] (hostnamePortCombinations: String)com.twitter.finagle.builder.ClientBuilder[Nothing,Nothing,com.twitter.finagle.builder.ClientConfig.Yes,Nothing,Nothing] [ERROR] cannot be applied to (Seq[java.net.SocketAddress]) [ERROR] .hosts(Seq(address)) [ERROR] ^ [ERROR] /home/sili/code/scrooge/demos/scrooge-maven-demo/src/main/scala/com/twitter/example/Demo.scala:37: error: overloaded method value stack with alternatives: [ERROR] [Req1, Rep1](server: com.twitter.finagle.server.StackBasedServer[Req1,Rep1])com.twitter.finagle.builder.ServerBuilder[Req1,Rep1,com.twitter.finagle.builder.ServerConfig.Yes,Nothing, Nothing] [ERROR] [Req1, Rep1](mk: com.twitter.finagle.Stack.Params => com.twitter.finagle.Server[Req1,Rep1])com.twitter.finagle.builder.ServerBuilder[Req1,Rep1,com.twitter.finagle.builder.ServerConf ig.Yes,Nothing,Nothing] [ERROR] cannot be applied to (com.twitter.finagle.Thrift.Client) [ERROR] .stack(Thrift.client) [ERROR] ^ [ERROR] /home/sili/code/scrooge/demos/scrooge-maven-demo/target/generated-sources/thrift/scrooge/com/twitter/mydemo/renamed/UserService.scala:60: error: type Filterable is not a member of obj ect com.twitter.finagle.thrift.ThriftServiceIface [ERROR] with com.twitter.finagle.thrift.ThriftServiceIface.Filterable[ServiceIface] { [ERROR] ^ [ERROR] /home/sili/code/scrooge/demos/scrooge-maven-demo/target/generated-sources/thrift/scrooge/com/twitter/mydemo/renamed/UserService.scala:80: error: type mismatch; [ERROR] found : com.twitter.finagle.Service[com.twitter.mydemo.renamed.UserService.CreateUser.Args,com.twitter.mydemo.renamed.UserService.CreateUser.Result] [ERROR] required: com.twitter.finagle.Service[com.twitter.mydemo.renamed.UserService.CreateUser.Args,com.twitter.mydemo.renamed.UserService.CreateUser.SuccessType] [ERROR] (which expands to) com.twitter.finagle.Service[com.twitter.mydemo.renamed.UserService.CreateUser.Args,com.twitter.mydemo.renamed.User] [ERROR] createUser = ThriftServiceIface(self.CreateUser, binaryService, pf, stats) [ERROR] ^ [ERROR] /home/sili/code/scrooge/demos/scrooge-maven-demo/target/generated-sources/thrift/scrooge/org/apache/scribe/thriftscala/Scribe.scala:60: error: type Filterable is not a member of objec t com.twitter.finagle.thrift.ThriftServiceIface [ERROR] with com.twitter.finagle.thrift.ThriftServiceIface.Filterable[ServiceIface] { [ERROR] ^ [ERROR] /home/sili/code/scrooge/demos/scrooge-maven-demo/target/generated-sources/thrift/scrooge/org/apache/scribe/thriftscala/Scribe.scala:80: error: type mismatch; [ERROR] found : com.twitter.finagle.Service[org.apache.scribe.thriftscala.Scribe.Log.Args,org.apache.scribe.thriftscala.Scribe.Log.Result] [ERROR] required: com.twitter.finagle.Service[org.apache.scribe.thriftscala.Scribe.Log.Args,org.apache.scribe.thriftscala.Scribe.Log.SuccessType] [ERROR] (which expands to) com.twitter.finagle.Service[org.apache.scribe.thriftscala.Scribe.Log.Args,org.apache.scribe.thriftscala.ResultCode] [ERROR] log = ThriftServiceIface(self.Log, binaryService, pf, stats) [ERROR] ^ [ERROR] 6 errors found [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 08:06 min [INFO] Finished at: 2017-05-05T17:39:19+08:00 [INFO] Final Memory: 16M/292M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.1.0:compile (default) on project scrooge-demo: wrap: org.apache.commons.exec.ExecuteException: Process exited with an er ror: 1(Exit value: 1) -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

QuantumBear avatar May 05 '17 09:05 QuantumBear

@QuantumBear yeah that looks like a bug.

and worse, it looks like we have nothing in the way of tests (or even compilation!) for the demos.

it probably wouldn't be too hard to fix based on a quick look around in that folder.

kevinoliver avatar May 08 '17 19:05 kevinoliver

@QuantumBear I'm going to take a stab at this. In the long run, we should have a travisci job which will fail if the demos don't build. Would you be interested in making a PR for that?

mosesn avatar May 09 '17 00:05 mosesn

I just ran into the same issue on Scrooge 18.5.0 with libthrift 0.10.0, which is the default version included with that version of Scrooge. I played around with different versions of libthrift, but no dice.

Are there any workarounds for the issue?

gregsilin avatar May 14 '18 23:05 gregsilin

@gregsilin sorry for not getting back to you for a while. just to confirm, the issue you're seeing is with the scrooge demos?

mosesn avatar Jun 18 '18 14:06 mosesn

I ran into that just now when the maven (or sbt in my case) and the lib versions aren't aligned. Especially recently moving things from .scrooge to .finagle.thrift threw me off because I updated the lib but not the plugin:

object ThriftService is not a member of package com.twitter.scrooge

I don't know if this is the exact same as the — now quite old — original issue, but it seems something to verify, as generator & code versions not matching produce these weird "class no found" errors.

mmlac avatar Jan 18 '19 05:01 mmlac

I had the same problem and solved it by updating the sbt-scrooge-plugin in project/plugins.sbt like so:

addSbtPlugin("com.twitter" %% "scrooge-sbt-plugin" % "19.1.0")

and adding these dependencies in build.sbt:

"com.github.finagle" %% "finch-core" % "0.27.0",
"com.twitter" %% "finagle-thrift" % "19.1.0",
"com.twitter" %% "util-core" % "19.1.0",
"com.twitter" %% "scrooge-core" % "19.1.0"

As you can see I'm using Finagle. Hope it helps.

tavoaqp-zz avatar Feb 18 '19 13:02 tavoaqp-zz