sbt doc error with Antler generated source code - sbt

I have ANTLR to generate parser/lexer code in "./gen" directory.
With sbt, everything works fine; no issue with compile and test.
However, when I executed doc to invoke scaladoc, I have error messages saying that it cannot find the object that ANTLR generated.
> doc
[info] Main Scala API documentation to /Users/smcho/github/ChitchatCompilerScala/doc/api...
[error] /Users/smcho/github/ChitchatCompilerScala/src/main/scala/node/NodeGenerator.scala:6: not found: object parser
[error] import parser.{ChitchatLexer, ChitchatParser}
[error] ^
What might be wrong?

I had to teach sbt about the new source directory.
unmanagedSourceDirectories in Compile += baseDirectory.value / "extra-src"
Hint from http://www.scala-sbt.org/0.13/docs/Howto-Customizing-Paths.html

Related

Translating Lightbend activator to sbt

I'm trying to work through the book Reactive Web Applications, but it seems that it's already a bit out of date in that lightbend activator has been EOL'd so I can't download it (or at least can't figure out how to and probably shouldn't even if I could).
I'm faced with the problem of creating the new project, which in the book would be done via the command
activator new twitter-stream play-scala-2.4
I tried what I though was the equivalent sbt command but got the following error.
urban:playground dhosek$ sbt new playframework/play-scala-seed.g8
[info] Set current project to playground (in build
file:/Users/dhosek/playground/)
[error] Not a valid command: new (similar: set)
[error] Not a valid project ID: new
[error] Expected ':' (if selecting a configuration)
[error] Not a valid key: new (similar: name, run, runner)
[error] new
[error] ^
Any help?
It appears that the problem is that brew installs an old version of sbt.

Appcelerator - include jar in build at compile-time?

Since Appcelerator(/Hyperloop) doesn't use Gradle or Maven to manage dependencies, I need to include them all manually for my project by placing them in the app/platform/android folder. I have done this, however I also need to include google dagger (https://github.com/google/dagger) which requires including dagger-compiler-2.x.jar , which I believe is an annotation processor that generates some type of code during compile-time.
Simply placing this in the app/platform/android folder like any other jar results in this error when the dexer is running during the build:
[ERROR] : Failed to run dexer:
[ERROR] :
[ERROR] : PARSE ERROR:
[ERROR] : MethodHandle not supported
[ERROR] : ...while preparsing cst 016c at offset 00001ceb
[ERROR] : ...while parsing com/google/googlejavaformat/java/JavaInput.class
[ERROR] : 1 error; aborting
I think it has something to do with the part of the dagger instructions which state "you will need to include dagger-compiler-2.x.jar in your build at compile time." Is there somewhere else that I need to place this jar file to get it to be used properly? Or is the use of compile-time annotation processors not something that Appcelerator/Hyperloop supports at this time? Any thoughts or insight would be greatly appreciated.
A good amount has changed since this question was asked. This being said, I believe that currently Hyperloop for Android doesn't handle annotations. And this is how dependency injection systems work, so I believe it's still not currently possible to use that or similar JARs.

OPAL-How to build code in Docker in local machine (faced compile error)?

I access code in Docker($docker pull mreif/fse2016:evaluation), the code could be compiled and run without errors in remote server. While i download it to local machine, i suffered some errors in compiling(using: sbt compile):
[error] (*:update) sbt.ResolveException: unresolved dependency: de.opal-project#abstract-interpretation-framework_2.11;0.9.0-SNAPSHOT: not
[What i have done] I added follow lines into "build.sbt":
resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"
[error] evaluation/src/main/scala/org/opalj/evaluation/EntryPointAndCallEdgeCountAnalysis.scala:90: not found:
[What i have done] I added follow lines into "build.sbt":
libraryDependencies += "de.opal-project" % "fixpoint-computations-framework-analyses_2.11" % "0.9.0- SNAPSHOT"
3.[error] /src/main/scala/org/opalj/evaluation/EntryPointAndCallEdgeCountAnalysis.scala:130: not found: value LibraryEntryPointsAnalysis
I have checked the related code, LibraryEntryPointsAnalysis has been actually imported but doesn't work.
Could you please help me to confirm is there any operations i missed for compile the source code?
Thank you very much!
Jiang
The reason why it is not working is a version mismatch of the OPAL framework. The reason why it doesn't find the "LibraryEntryPointAnalysis" is, that it has been renamed.
You have to options:
Use the version of OPAL that is used in the Docker container
make a check out of OPAL at from version tag "ArtifactEvaluationFSE2016"
copy OPAl from the container like you did with the evaluation project
Adapt the Evaluation Project to the new API
the LibraryEntryPointsAnalysis is now called EntryPointAnalysis
there are probably other breaking changes that you have to fix
If you want to go with option one you have to build OPAL on your own because the eval version is not published on maven.

sbt-proguard issue with Java 1.8

I'm trying to get smaller scalar executable jar file with sbt-proguard.
I added project/plugin.sbt these two lines of code:
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2")
The first one is to get uberjar file, and I could get uberjar with sbt assembly that works fine.
Then, I executed sbt proguard:proguard to get this error message.
[error] Error: Can't read [/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/rt.jar] (Can't process class [apple/applescript/AppleScriptEngine.class] (Unsupported class version number [52.0] (maximum 51.0, Java 1.7)))
java.lang.RuntimeException: Proguard failed with exit code [1]
at scala.sys.package$.error(package.scala:27)
...
at java.lang.Thread.run(Thread.java:745)
[error] (proguard:proguard) Proguard failed with exit code [1]
From the hint from this post: ProGuard says Unsupported class version number [52.0] (maximum 51.0, Java 1.7) with sbt-proguard,
I switched to both Java 1.7 and Java 1.6 with export JAVA_HOME=/usr/libexec/java_home -v '1.6*' command to run proguard to get the slim-lined jar file, but this doesn't run.
Invalid or corrupt jarfile target/scala-2.11/proguard/myproject_2.11-1.0.jar
What might be wrong? These are the lines that are added to build.sbt.
proguardSettings
ProguardKeys.options in Proguard ++= Seq("-dontnote", "-dontwarn", "-ignorewarnings")
ProguardKeys.options in Proguard += ProguardOptions.keepMain("core.HelloWorld")
I believe this is documented in the pro guard docs.
Running your application with java -classpath <jarpath> --class classname <program-arguments> should work.
This happens because pro guard by default removes all MANIFEST files from the jar hence the java runtime cannot find the jar class entries. Another way to do this would be to keep the MANIFEST.md file and run it using the java -jar option but I have never tried that.
Define a recent Proguard version that supports Java 1.8
ProguardKeys.proguardVersion in Proguard := "5.3.3"
Also a couple of useful ones if you run out of mem are
javaOptions in (Proguard, ProguardKeys.proguard) := Seq("-Xmx2G")
javaOptions in (Proguard, ProguardKeys.proguard) += "-Xss1G"

Specifying a relative source directory

I have just recently forked an outdated SBT project (which you can find here https://github.com/mdedetrich/sbt-bower) that was last working with an outdated version of SBT 0.11.0. I am trying to get the sbt plugin to work with SBT versions 0.12.3 and 0.13.0, however I am getting an issue on this line
https://github.com/mdedetrich/sbt-bower/blob/master/src/main/scala/SbtBowerPlugin.scala#L37
When I run sbt compile, I get the following error
[error] /Users/mdedetrich/github/sbt-bower/src/main/scala/SbtBowerPlugin.scala:37: value / is not a member of java.io.File
[error] sourceDirectory in Bower <<= (sourceDirectory).apply (_ / "main" / "webapp" )
Does anyone know what is causing this issue?
Thanks to Mark Harrah, this is actually due to this https://groups.google.com/forum/#!topic/simple-build-tool/0k1No2kfvm8/discussion
I had to remove the import Path._ in the SbtBowerPlugin.scala file and it now compiles fine!

Resources