仅使用Maven使用Kotlin的Android资源扩展

我想在我的基于Maven的项目中使用Kotlin Android扩展 ,但是尽管在我的Maven插件中添加了kotlin-android-extensions ,但是并不需要。

我的想法很简单,设置如下:

 . ├── AndroidManifest.xml ├── pom.xml ├── res │  └── layout │  └── main_activity.xml └── src └── activity.kt 

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.KotlinAndroid" android:versionCode="1" android:versionName="0.1-SNAPSHOT"> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <application android:label="Hello Kotlin"> <activity android:name=".activity.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

pom.xml

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example.KotlinAndroid</groupId> <artifactId>hello-kotlin</artifactId> <packaging>apk</packaging> <name>hello-kotlin</name> <version>0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>4.1.1.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib</artifactId> <version>1.0.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>3.8.2</version> <configuration> <sdk> <platform>19</platform> </sdk> <undeployBeforeDeploy>true</undeployBeforeDeploy> </configuration> <extensions>true</extensions> </plugin> <plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <version>1.0.0</version> <executions> <execution> <id>compile</id> <phase>process-sources</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>process-test-sources</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-android</artifactId> <version>1.0.0</version> </plugin> <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-android-extensions</artifactId> <version>1.0.0</version> </plugin> <!-- I needed to add this plugin otherwise my Kotlin source files are not found --> <plugin> <groupId>org.codehaus.mojo</groupId> <version>1.10</version> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <phase>generate-sources</phase> <goals><goal>add-source</goal></goals> <configuration> <sources> <source>src</source> </sources> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> 

res/layout/main_activity.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:text="Hello World!" android:id="@+id/textView" /> </LinearLayout> 

src/activity.kt

 package com.example.KotlinAndroid.activity import android.os.Bundle import android.app.Activity import com.example.KotlinAndroid.R class MainActivity() : Activity() { protected override fun onCreate(savedInstanceState : Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) } } 

所以这一切工作,直到我改变activity.kt导入kotlinx.android.synthetic.main.main_activity.*而不是import com.example.KotlinAndroid.R ,然后失败

  • [错误] hello-kotlin/src/activity.kt :(6,8)未解决的参考: kotlinx

  • [错误] hello-kotlin/src/activity.kt :( hello-kotlin/src/activity.kt )Unresolved reference: R

我发现这个问题的所有解决方案只适用于Gradle构建,在这种情况下显然添加kotlin-android-extensions插件就足够了。 然而,在我的Maven构建中,我已经在我的插件列表中有kotlin-android-extensions (参见pom.xml文件)。 而Kotlin不会生成所需的kotlinx.*类。

kotlin-android-extensions现在是kotlin-gradle插件的一部分。 kotlin-maven插件现在不支持android。 您的跟踪器中存在一个问题 ,您可以投票。