Using classpathTransformerFactories in sbteclipse plugin to exclude Scala library?

StackOverflow https://stackoverflow.com/questions/22347946

  •  13-06-2023
  •  | 
  •  

سؤال

I'm extracting my Scala Swing applications in separate modules. And I don't want to have the Scala Library from the IDE in the classpath because it also includes Scala Swing.

I've changed the following classpathentry

<classpathentry
  kind="con"
  path="org.scala-ide.sdt.launching.SCALA_CONTAINER"/>

to

<classpathentry
  sourcepath="C:\Users\wwagner\.ivy2\cache\org.scala-lang\scala-library\srcs\scala-library-2.10.3-sources.jar" 
  kind="lib" 
  path="C:\Users\wwagner\.ivy2\cache\org.scala-lang\scala-library\jars\scala-library-2.10.3.jar"/>

That works as expected but I found that the sbteclipse plugin supports classpathTransformerFactories, which can do it automatically.

How can classpathTransformerFactories help me with the use case?

هل كانت مفيدة؟

المحلول

What I had to do was implementing the following in my Build.scala

  // sbteclipse rewrite rules
  object ClasspathentryRewriteRule extends RewriteRule {
    override def transform(parent: Node): Seq[Node] = {
      parent match {
        case c @ <classpathentry/> if (c \ "@path").toString().endsWith("SCALA_CONTAINER") =>
          val home = System.getProperty("user.home")
          val base = s"""$home\\.ivy2\\cache\\org.scala-lang\\scala-library"""
          val srcPath = s"""${base}\\srcs\\scala-library-${D.scalaVersion}-sources.jar"""
          val path = s"""${base}\\jars\\scala-library-${D.scalaVersion}.jar"""
          <classpathentry sourcepath={ srcPath } kind="lib" path={ path }/>
        case other => other
      }
    }
  }

  // sbteclipse transformer
  object ClasspathentryTransformer extends EclipseTransformerFactory[RewriteRule] {
    override def createTransformer(ref: ProjectRef, state: State): Validation[RewriteRule] = {
      ClasspathentryRewriteRule.success
    }
  }

In the setting the following code completed the job:

      ....
      EclipseKeys.classpathTransformerFactories := Seq(ClasspathentryTransformer)
      ....
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top