用Gradle和Kotlin构建一个可执行的jar

我已经写了一个简单的kotlin源文件,以便开始,并且一个gradle脚本文件。 但我不知道如何将主要的func添加到清单,以便该jar可以自我执行。 这里我的build.gradle脚本: buildscript { repositories { mavenCentral() } dependencies { classpath ‘org.jetbrains.kotlin:kotlin-gradle-plugin:0.9.66’ } } apply plugin: “kotlin” repositories { mavenCentral() } dependencies { compile ‘org.jetbrains.kotlin:kotlin-stdlib:0.9.66’ } jar { manifest { attributes ‘Main-Class’: ‘com.loloof64.kotlin.exps.ExpsPackage’ } } 这是我的com.loloof64.kotlin.exps.Multideclarations.kt package com.loloof64.kotlin.exps class Person(val firstName: String, val lastName: String) { fun component1(): String { return firstName } fun […]

无法分析:org.jetbrains.kotlin.kapt3.diagnostic.KaptError:批注处理时出错

我正在探索Android支持的Dagger生命周期在Kotlin中注入依赖,但他们总是无法生成匕首依赖代码。 错误信息如下: public abstract interface MainComponent { ^ java.lang.IllegalStateException: failed to analyze: org.jetbrains.kotlin.kapt3.diagnostic.KaptError: Error while annotation processing 这里是MainComponent.kt的附件 @Singleton @Component(modules = arrayOf(AndroidSupportInjectionModule::class,AndroidInjectionModule::class,AppModule::class, NetworkModule::class, ActivityBuilder::class)) open interface MainComponent{ @Component.Builder interface Builder { @BindsInstance fun application(application: Application): Builder fun build(): MainComponent } fun inject(app: ActifyApplication) } 我尝试了不同的解决方案,像kapt在应用程序级别gradle中启用true,但尚未修复。请给出一些见解为什么总是这种情况。 您的帮助将非常感激。提前感谢。

在IntelliJ中Kotlin未解决的参考

我开始在IntelliJ学习Kotlin的教程 。当我尝试运行示例即 fun main(args: Array) { println(“lol”) } 执行被暂停这个消息Error:(5, 5) Kotlin: Unresolved reference: println这是我第一次使用IntelliJ.I从来没有在一个Java项目上工作。我错过了什么? 编辑:我已经看到了另一个问题。答案是不适合我的情况。

如何在Intellij 15降级Kotlin

对于我的项目,我需要使用Kotlin 1.0.0-1038(测试版),但要安装它,我可能需要卸载较新版本的kotlin,但它没有卸载按钮,它应该有。 我将如何降级Kotlin? IntelliJ IDEA 15.0.4

什么是从KType创建类实例的正确方法

我有两个类可能看起来像这样 class MyClass { var myProperty: AnotherClass? } class AnotherClass { } 通过reflection我遍历MyClass的属性,当我find一个KMutableProperty这是null我想创建该类的一个实例。 现在我正在做这样的事情 val instance = MyClass() val property = MyClass::myProperty var subInstance = it.getter.call(instance) if (subInstance == null) { it.setter.call(instance, property.returnType.jvmErasure.createInstance()) } 但这似乎是一个可怕的黑客,需要知道内部使用Java魔法而不是纯粹的Kotlin,有没有一个正确的方法来做我想要的? 或者这是正确的方式?

在按钮上单击Admob插页式广告

我使用kotlin在android studio中制作了一个应用程序,当点击一个按钮的广告出现时,我尝试添加插页式广告,并在广告关闭后使用onAdClosed()方法显示第二个活动,问题在于应用程序有时候会在主要活动2中保持压制状态3.这就是我的代码的样子 private lateinit var mInterstitialAd: InterstitialAd private lateinit var adRequest : AdRequest override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) MobileAds.initialize(this, “ca-app-pub-3940256099942544~3347511713”) mInterstitialAd = InterstitialAd(this) mInterstitialAd.adUnitId = “ca-app-pub-3940256099942544/1033173712” requestNewInterstitial() button2.setOnClickListener{ val intent1 = Intent(this,Main2Activity::class.java) startActivity(intent1) if (mInterstitialAd.isLoaded) { mInterstitialAd.show() } else { } mInterstitialAd.adListener = object : AdListener() { override fun onAdClosed() { requestNewInterstitial() //go […]

“对象”不是这个域的模式的一部分

当我调用realm.where(MessageEventModel::class.java).findAll() 它抛出excepiton:这是错误的 java.lang.IllegalArgumentException: MessageEventModel is not part of the schema for this Realm at io.realm.internal.modules.CompositeMediator.getMediator(CompositeMediator.java:172) at io.realm.internal.modules.CompositeMediator.getTableName(CompositeMediator.java:90) 这是我的应用程序类 class MyApp : Application() { override fun onCreate() { super.onCreate() Realm.init(this) val realmConfiguration = RealmConfiguration.Builder() .deleteRealmIfMigrationNeeded() .name(“my_db”) .build() Realm.setDefaultConfiguration(realmConfiguration) } } 这是我的领域模型 class MessageEventModel : RealmObject{ constructor() var message = “” constructor(message: String) : this(){ this.message = […]

你如何更改IntelliJ默认的Gradle包装和构建文件?

我正在尝试从所有的IntelliJ / Kotlin项目切换到Grailla Kotlin DSL从香草Gradle。 这需要我在构建文件的Gradle包装器任务中指定distributionUrl属性。 然而每当我创建一个Gradle项目并选择“默认的Gradle包装”选项时,IntelliJ会自动生成一个vanilla Gradle版本4.0(至少现在)包装并使用它构建项目。 这不仅会在我的机器上安装一个未使用的Gradle发行版,而且使我手动重新创建构建文件和包装器,而且Gradle 4.0也不兼容Java 9。 有什么方法可以改变什么默认的Gradle包装/构建文件由IntelliJ生成,因为我看到在Gradle插件的设置选项卡中没有包assembly置选项?

当声明站点协变时,强制types参数在使用地点不变

我正在KProperty1上构建一个扩展函数。 即使KProperty1在types参数R是协变的,该函数也需要接受扩展属性( R )的值types的参数。 一个稍微人为的例子将是以下,虽然我的使用更合法。 data class Data(val value: String) fun KProperty1.setMagically(value: V) { this.javaField?.set(null, value) } fun test() { // I would like this to fail to compile Data::value.setMagically(190) } 似乎编译器推断出R的typesAny ,这是完全有效的,因为KProperty1 : KProperty1 我想要说的是,对于我的具体情况,我确实希望V是不变的。 我知道你可以使用out和in作为差异的宽度,但我无法弄清楚如何指定我想重写KProperty1上的协变注释,这种情况下是不变的。 值得注意的是,它与KMutableProperty1效果很好,因为它在R中是不变的。 但是我的代码也需要使用非可变属性。 对于上下文,我建立一些东西,生成数据库查询,这就是为什么我需要的价值是属性types的子类,即使我没有写入属性,但这个问题比我的具体,物业处理案件。

kotlinx-coroutines-reactive如何处理null场景?

kotlinx-coroutines-reactive使org.reactivestreams.Publisher拥有awaitXXX方法: val person = peopleReactiveRepository.findById(personId).awaitSingle() 如果没有人可以通过人员IDfind,则此调用将引发NoSuchElementException,并且此exception不能直接在用户代码中处理 。 而Spring MVC ExceptionHandler不能将这个exception转换成用户友好的响应。 java.util.NoSuchElementException: No value received via onNext for awaitSingle at kotlinx.coroutines.experimental.reactive.AwaitKt$awaitOne$$inlined$suspendCancellableCoroutine$lambda$1.onComplete(Await.kt:131) ~[kotlinx-coroutines-reactive-0.22.1.jar:na] at reactor.core.publisher.StrictSubscriber.onComplete(StrictSubscriber.java:123) ~[reactor-core-3.1.2.RELEASE.jar:3.1.2.RELEASE] at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onComplete(Operators.java:1327) ~[reactor-core-3.1.2.RELEASE.jar:3.1.2.RELEASE] at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onComplete(FluxHide.java:137) ~[reactor-core-3.1.2.RELEASE.jar:3.1.2.RELEASE] at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:130) ~[reactor-core-3.1.2.RELEASE.jar:3.1.2.RELEASE] at reactor.core.publisher.MonoNext$NextSubscriber.onComplete(MonoNext.java:96) ~[reactor-core-3.1.2.RELEASE.jar:3.1.2.RELEASE] at com.mongodb.reactivestreams.client.internal.ObservableToPublisher$1.onComplete(ObservableToPublisher.java:78) ~[mongodb-driver-reactivestreams-1.6.0.jar:na] 我可以找出的一个方法如下: val person = peopleRepository.findById(personId).awaitFirstOrDefault(null) if (person == null) { // do something } 但我不认为这是一个优雅的方式。 例如,可以提供一个名为awaitSingleOptional的方法。 […]