小编Ben*_*n H的帖子

如何分析 Maven pom.xml 的错误(用于冗余或忽略属性的 pom linter?)

pom.xml的很乱,随着时间的推移收集了cruft。有没有自动的方法来“清理”一个pom?就像一个短绒,但对于 maven。

在 IntelliJ 中,我可以运行Analyze > Inspect Code并获取未使用的函数、愚蠢的迭代器和可能的错误的列表。我想我正在为我的 pom 寻找同样的东西

  1. 未使用的存储库,pluginRepositories
  2. 未使用的属性
  3. 与插件中指定的设置相冲突的属性
  4. 更新版本的依赖项(mvn versions:display-dependency-updates有效,但不限于非破坏性版本更新)

java static-analysis maven

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

java https://localhost (SSL) - 可以在客户端上安装证书吗?

阅读完以下内容后,我仍然坚持制作最低限度的https ://localhost 独立免安装 Web 服务器 Java 应用程序。它需要是无库的,使用 Java 8,并接受来自浏览器的连接,而无需先安装任何特殊的客户端证书。我不清楚自签名证书是否可以实现这一点,因为它只适用于“localhost”。

到目前为止,我已经使用生成了一些关键文件

openssl genrsa -aes128 -out privkey.pem 2048  # makes privkey.pem
openssl req -new -x509 -key privkey.pem # makes cert.crt
Run Code Online (Sandbox Code Playgroud)

我已经拼凑了最基本的 Kotlin 设置函数

private fun ssl():SSLServerSocketFactory {
    val password = "MYPASSWORD".toCharArray()
    val kmf = KeyManagerFactory.getInstance("SunX509")
    val tmf = TrustManagerFactory.getInstance("SunX509")
    val sslContext = SSLContext.getInstance("TLS")

    // initialise the keystore
    KeyStore.getInstance("JKS").let { ks->
        FileInputStream("lig.keystore").use {
            ks.load(it, password)
        }
        kmf.init(ks, password)
        tmf.init(ks)
    }

    // …
Run Code Online (Sandbox Code Playgroud)

java ssl https kotlin

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

是否可以在"懒惰"初始化程序中暂停-Coroutine?我得到错误"Android主循环线程中不允许运行阻止"

我有很多我的应用程序正常使用"懒惰"初始化程序,因为一切都神奇地按照必要的顺序发生.

但并非所有初始化程序都是同步的.其中一些是包装回调,这意味着我需要等到回调发生,这意味着我需要runBlockingsuspendCoroutine.

但在重构​​一切后,我明白了 IllegalStateException: runBlocking is not allowed in Android main looper thread

什么?你不能阻止?你在这里杀了我.如果我的"偷懒"恰好是阻挡功能,那么正确的方法是什么?

private val cameraCaptureSession: CameraCaptureSession by lazy {
    runBlocking(Background) {
        suspendCoroutine { cont: Continuation<CameraCaptureSession> ->
            cameraDevice.createCaptureSession(Arrays.asList(readySurface, imageReader.surface), object : CameraCaptureSession.StateCallback() {
                override fun onConfigured(session: CameraCaptureSession) {
                    cont.resume(session).also {
                        Log.i(TAG, "Created cameraCaptureSession through createCaptureSession.onConfigured")
                    }
                }

                override fun onConfigureFailed(session: CameraCaptureSession) {
                    cont.resumeWithException(Exception("createCaptureSession.onConfigureFailed")).also {
                        Log.e(TAG, "onConfigureFailed: Could not configure capture session.")
                    }
                }
            }, backgroundHandler)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该类的完整GIST,用于了解我最初想要实现的目标:https://gist.github.com/salamanders/aae560d9f72289d5e4b49011fd2ce62b

kotlin kotlin-android-extensions kotlin-coroutines

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

Kotlin"out"和"in"以及泛型 - 正确使用

我试图让一个普通的可怜人的数据持久化功能,将采取一个MutableSet数据类,并将其序列化到磁盘.我想要一些简单的原型设计,并且可以经常在集合上调用"save()",这样如果我的进程被杀死,我可以稍后使用已保存条目的"load()"恢复.

但即使重读了Generics页面,我也没有完全区分'*','in','out'和'Nothing'之间的区别.这个SEEMS可以在不抛出错误的情况下工作,但我不明白为什么他们都"出局",我认为一个人必须"进入"...或者更可能我理解Kotlin Generics完全错误.这样做有正确的方法吗?

/** Save/load any MutableSet<Serializable> */
fun MutableSet<out Serializable>.save(fileName:String="persist_${javaClass.simpleName}.ser") {
    val tmpFile = File.createTempFile(fileName, ".tmp")
    ObjectOutputStream(GZIPOutputStream(FileOutputStream(tmpFile))).use {
        println("Persisting collection with ${this.size} entries.")
        it.writeObject(this)
    }
    Files.move(Paths.get(tmpFile), Paths.get(fileName), StandardCopyOption.REPLACE_EXISTING)
}

fun MutableSet<out Serializable>.load(fileName:String="persist_${javaClass.simpleName}.ser") {
    if (File(fileName).canRead()) {
        ObjectInputStream(GZIPInputStream(FileInputStream(fileName))).use {
            val loaded = it.readObject() as Collection<Nothing>
            println("Loading collection with ${loaded.size} entries.")
            this.addAll(loaded)
        }
    }
} 

data class MyWhatever(val sourceFile: String, val frame: Int) : Serializable
Run Code Online (Sandbox Code Playgroud)

然后能够启动任何应用程序

val mySet = mutableSetOf<MyWhatever>()
mySet.load()
Run Code Online (Sandbox Code Playgroud)

generics kotlin kotlin-generics

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

如何在 Maven 中只构建 jar-而不包含依赖项?

我正在编译 Kotlin(JRE) 并将其部署到一个小机器人上。我非常幸运地创建了一个带有依赖项的 jar,谢谢 StackOverflow。

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>${project.main.class}</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

但罐子很大,大约有 25mb 大。没有依赖项的 jar 大小是完全合理的 26kb,这确实很重要,因为打包那个大 JAR 很慢,然后我scp每次都必须将其部署到机器人。

我能够将所有依赖项预加载到机器人上的一个文件夹中,通过mvn dependency:copy-dependencies并将它们复制过来。(再次感谢 StackOverflow)。现在我需要一种简单的方法来设置一个属性,使其只需编译和复制即可target/MYBOT-1.0-SNAPSHOT.jar,而不必target/MYBOT-1.0-SNAPSHOT-jar-with-dependencies.jar每次都尝试编译文件。

maven maven-assembly-plugin

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

Kotlin:如何获取与第一行匹配的捕获组?

  1. 以lineSequence开头
  2. 我想测试一个正则表达式是否匹配,如果匹配,则获得第一个匹配项
  3. 此外,我想从该正则表达式匹配项中返回一个捕获组

如果我不在乎,我会在lineSequence上做一个“ first”,如果存在,请重新运行正则表达式。

val possibleMatch = input.lineSequence().first { myRegex.matches(it) }
Run Code Online (Sandbox Code Playgroud)

...但是我想成为科特林酷派,而不必重新运行正则表达式。我应该使用映射到MatchGroup并过滤出null吗?感觉比以前更冗长...

input.lineSequence()
.mapNotNull { myRegex.find(it) }
.map { it.groupValues[1] }
.first()
Run Code Online (Sandbox Code Playgroud)

regex sequence kotlin

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

kotlin 中的“协程局部”变量

Java 具有 ThreadLocal 变量,这些变量非常适合运行并行操作,而无需踩踏其他线程或每个循环分配,例如 OpenCV 使用videoCapture.retrieve(image),“图像”可能是线程局部变量。

Kotlin 对“协程本地”变量有任何意义吗?如果我想以他们的反例为例,但每个协程都有一个计数器,我该怎么做?

for (i in 1..1_000_000)
    thread(start = true) {
       c.addAndGet(i)
    }
Run Code Online (Sandbox Code Playgroud)

coroutine kotlin kotlin-coroutines

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