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

问题描述:

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

我,我觉得相当小,设置如下:

. 
├── 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

  • [ERROR] hello-kotlin/src/activity.kt:(12,24) 未解决的引用:R

所有解决这一问题,我已经发现仅适用于摇篮建立,在这种情况下显然添加kotlin-android-extensions插件就够了。然而,在我的Maven构建版中,我的插件列表中已经有kotlin-android-extensions(请参阅pom.xml文件);但Kotlin不会生成所需的kotlinx.*类。

+0

我还应该补充说,你看到的是我得到的:我没有使用任何IDE。这是我的完整源码树,我运行'mvn3 package'来生成我的APK文件。 – Cactus

+1

您可能需要将其添加到某个生命周期目标,以便知道何时执行。鉴于Android推动Gradle的想法,你可能会在这里反对谷物。 –

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

+0

我真的很想使用Maven构建我的kotlin android项目。 – xap4o