小编dav*_*rez的帖子

如何在编译时使用反射

我有这种情况:

class Column {
}

trait Table {
    lazy val columns: List[Column] = ....
}

class MyTable extends Table {
   val column1 = new Column()
   val column2 = new Column()
}
Run Code Online (Sandbox Code Playgroud)

我想在编译时获取派生类中定义的列的列表.

我已经能够通过使用运行时反射来做到,但我听说它在Android和ProGuard中可能会有问题.所以,如果可能的话,我想在编译时这样做.

https://groups.google.com/forum/#!topic/scala-on-android/Q0E_OMYqE0A

这是我的运行时反射实现:

trait Table {
    lazy val columns: List[Column] = {
        import scala.reflect.runtime.universe._
        val rm = scala.reflect.runtime.currentMirror
        val columns = rm.classSymbol(this.getClass).toType.members.collect {
            case m: MethodSymbol if m.isGetter && m.returnType <:< typeOf[Column] => m
        }
        val espejo = rm.reflect(this)
        (for (col <- columns) yield
            espejo.reflectMethod(col).apply().asInstanceOf[Column]).toList
    }    
}
Run Code Online (Sandbox Code Playgroud)

reflection scala

5
推荐指数
1
解决办法
1527
查看次数

Gradle:未找到 ID 为“android-library”的插件

我正在尝试使用 Gradle 自动化我的项目。

我有几个应用程序和一个库项目。仔细阅读官方文档后,这是我的 build.gradle 的简化视图:

buildscript {
    repositories {
        mavenCentral()
        maven {
            url "http://saturday06.github.io/gradle-android-scala-plugin/repository/snapshot"
        }
    }
    dependencies {
        // 0.8.3 con Gradle 1.10
        classpath 'org.gradle.api.plugins:gradle-android-plugin:1.2.1'
    }
}

apply plugin: 'idea'

project(':MyApp') {
    ext.apl = true
}

project(':MyLibrary') {
    ext.apl = false
}

subprojects {
    if (project.apl) {
        apply plugin: 'android'
        dependencies {
            compile 'ch.acra:acra:4.5.0'
        }
    }
    if (project.scala) {
        apply plugin: 'android-scala'
        scala {
            target "jvm-1.7"
            addparams '-feature'
        }
    } else {
        apply plugin: 'android-library'
    }
    android …
Run Code Online (Sandbox Code Playgroud)

android gradle

5
推荐指数
1
解决办法
8827
查看次数

Gradle包装器和守护进程

正如你们许多人所知,Gradle守护进程可以大大加速Gradle.

我有一个multimodule构建并使用Gradle包装器.

从命令行运行时:

gradlew :MyModule:test
Run Code Online (Sandbox Code Playgroud)

Gradle花了几秒钟分析我的模块.如果我再次发射,它会一次又一次地消耗宝贵的时间.

我正在使用Gradle 1.12.

我试过设置添加这一行:

org.gradle.daemon=true
Run Code Online (Sandbox Code Playgroud)

到local.properties,但没有运气.

我不知道是否必须更改myHome/.gradle/gradle.properties或其他文件.

gradle gradle-daemon

5
推荐指数
1
解决办法
2321
查看次数

如何在模式定义中记录val

我想为我班级的每个val和def创建ScalaDoc条目.问题是vals位于模式定义中,并且不知道如何使用/** */语法.

例:

class C(id: String) {
   val (part1, part2) = {
         .....
         (expr1, expr2)
   }
}
Run Code Online (Sandbox Code Playgroud)

我如何记录part1part2

在阅读有关ScalaDoc的文档之前,我已阅读过.

scala scaladoc

5
推荐指数
1
解决办法
1634
查看次数

如何在SBT中找到依赖项中的重复类

我正在将项目从Apache Maven迁移到sbt.

我的项目有很多依赖(超过200),有时,一个类可以复制,可能会导致奇怪的效果.

在Maven中,我一直在使用maven-duplicate-finder-plugin来检测这种情况.

我能看到的唯一解决方案是使用sbt-assembly插件生成一个大jar ,并配置为抱怨重复的类.我还没有尝试过.

我怎么能用SBT做到这一点?

参考文献:

sbt

5
推荐指数
1
解决办法
847
查看次数

如何从泛型类型调用重载方法

我有这组重载函数:

case class A[T](t: T)

object C {
   def dump(a: A[String], s: String) = ....
   def dump(a: A[Int], s: Int) = ....
   def dump(a: A[Double], s: Double) = ....
}
Run Code Online (Sandbox Code Playgroud)

并有这个通用的方法:

class B {
   def dump[T](a: A[T], t: T) = C.dump(a, t)
}
Run Code Online (Sandbox Code Playgroud)

它不编译,因为Scala编译器与不同的重载混淆.这样做的正确方法是什么?

scala

4
推荐指数
1
解决办法
537
查看次数

ReWriteRule 代理超时

使用 Apache 2.4 通过 ReWriteRule (mod_rewrite) 进行代理时,无法控制超时。

<VirtualHost "*:443">
  ServerName xxxx
  Use ssl
  RewriteEngine On
  RewriteRule (.*/wms|/openlayers3/.*) http://localhost:8080$1 [P,L]
  RewriteRule .* [F]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我尝试过但没有成功:

  • Timeout 400
  • ProxyTimeout 400
  • 代理集
<Proxy "http://localhost:8080/">
  ProxySet connectiontimeout=100 timeout=400
</Proxy>
Run Code Online (Sandbox Code Playgroud)
  • ProxyPass "/" "http://localhost:8080" connectiontimeout=100 timeout=400

无论我使用上述哪个指令,超时始终为 1 分钟。

apache proxy timeout

4
推荐指数
1
解决办法
1532
查看次数

如何动态加载 SBT 插件

sbt -plugin不适用于git worktrees

所以我想有条件地加载这个 SBT 插件。

sbt

2
推荐指数
1
解决办法
298
查看次数

如何中止声明性管道

我正在尝试新的声明性管道语法.

我想知道,当例如参数具有无效值时,我如何中止管道的所有阶段和步骤.

我可以when在每个阶段添加一个子句,但这对我来说不是最佳选择.有没有更好的方法呢?

jenkins jenkins-pipeline

2
推荐指数
1
解决办法
3426
查看次数

<Scala XML literal中注释中的变量信息

正如许多人所知,Scala XML文字允许以简单的方式嵌入代码中,XML文字.通过使用{}符号,可以嵌入可变信息.

例:

val something = "SOMETHING"
val xml = <elem>{hello}</elem>
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何在评论中嵌入可变信息.

这不起作用:

val xml = <elem><!-- A comment with {something} variable--></elem>
Run Code Online (Sandbox Code Playgroud)

scala

1
推荐指数
1
解决办法
266
查看次数

在Ammonite中导入$ ivy

我需要在Ammonite脚本中导入sikulixapi。我可以这样做。

因此,如果我从Ammonite的交互式控制台中执行以下操作:

@ import $ivy.`com.sikulix:sikulixapi:1.1.0` 
https://repo1.maven.org/maven2/com/sikulix/sikulixapi/1.1.0/sikulixapi-1.1.0.pom
  100,0% [##########] 5,3 KiB (37,6 KiB / s)
https://repo1.maven.org/maven2/com/nativelibs4java/bridj/0.6.2/bridj-0.6.2.pom
  100,0% [##########] 18,1 KiB (226,0 KiB / s)
https://repo1.maven.org/maven2/com/sikulix/sikulixlibslux/1.1.0/sikulixlibslux-1.1.0.pom
  100,0% [##########] 2,6 KiB (20,8 KiB / s)
https://repo1.maven.org/maven2/org/swinglabs/swing-layout/1.0.3/swing-layout-1.0.3.pom
  100,0% [##########] 858 B (6,5 KiB / s)
https://repo1.maven.org/maven2/com/nativelibs4java/nativelibs4java-parent/1.8/nativelibs4j…
  100,0% [##########] 16,8 KiB (204,3 KiB / s)
Failed to resolve ivy dependencies:
  jxgrabkey:jxgrabkey:1.0 
    not found: /home/jenkins/.ivy2/local/jxgrabkey/jxgrabkey/1.0/ivys/ivy.xml
    not found: https://repo1.maven.org/maven2/jxgrabkey/jxgrabkey/1.0/jxgrabkey-1.0.pom
Run Code Online (Sandbox Code Playgroud)

但是jxgrabkey确实存在于Maven中。

这也失败了:

@ import $ivy.`jxgrabkey:jxgrabkey:1.0` 
Failed to resolve ivy dependencies:abkey/jxgrabkey/1.0/jxgrabkey-1.0.pom.sha1
Run Code Online (Sandbox Code Playgroud)

我没有使用任何HTTP代理。

sikulixapi的其他版本有其他问题:

@ import …
Run Code Online (Sandbox Code Playgroud)

scala ammonite

1
推荐指数
1
解决办法
986
查看次数

字符串插值和占位符变量

为什么在REPL中这个表达式失败:

List("a", "b").foreach { System.out.println(s"Valor=$_") }
Run Code Online (Sandbox Code Playgroud)

有这个错误:

<console>:1: error: unclosed string literal
Run Code Online (Sandbox Code Playgroud)

而另一个成功:

List("a", "b").foreach { x => System.out.println(s"Valor=$x") }
Run Code Online (Sandbox Code Playgroud)

我怀疑不支持"_"变量.

这是一个bug还是设计?

scala string-interpolation

0
推荐指数
1
解决办法
1018
查看次数

要共享给另一个 Pod 的只读文件夹

我有一个需要创造大量就业机会的 Pod。我想共享一个只读文件夹。我该怎么做?

我可以想象的几个想法(我是 Kubernetes 的新手):

  • 临时卷似乎是一个不错的选择,但我读到它不能与另一个 Pod 共享。
  • 我认为 NFS 太过分了,无法满足我的需求。
  • 也许,我可以构建一个仅包含数据的 Docker 镜像,但这是 Docker 的一个已弃用的功能。
  • kubectl cp将基础 Pod 之间的数据复制到作业中的 Pod。

对此更好的解决方案是什么?

volume kubernetes

0
推荐指数
1
解决办法
808
查看次数