Maven не может собрать проект Android (не используя Eclipse)
Когда я пытаюсь собрать текущий проект Android с Maven (пакет mvn), я получаю эту ошибку:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project gs-maven-tabs: Compilation failure: Compilation failure:
[ERROR] /home/kleber/workspace/basic_tab/src/main/java/org/hello/HelloActivity.java:[5,29] error: cannot find symbol
[ERROR] symbol: class FragmentTabHost
[ERROR] location: package android.support.v4.app
[ERROR] /home/kleber/workspace/basic_tab/src/main/java/org/hello/HelloActivity.java:[9,12] error: cannot find symbol
[ERROR] symbol: class FragmentTabHost
[ERROR] location: class HelloActivity
[ERROR] /home/kleber/workspace/basic_tab/src/main/java/org/hello/HelloActivity.java:[16,20] error: cannot find symbol
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
связанные с этим классом:
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTabHost;
public class HelloActivity extends FragmentActivity {
// Fragment TabHost as mTabHost
private FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_layout);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab1"), Tab1Fragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"), Tab2Fragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("Tab3"), Tab3Fragment.class, null);
}
}
эта ошибка происходит, даже если я добавлю это в мой pom.xml:
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r6</version>
</dependency>
Что мне здесь не хватает?
PS.: мой полный pom.xml это:
<?xml version="1.0" encoding="UTF-8"?>
<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>org.hello</groupId>
<artifactId>gs-maven-tabs</artifactId>
<version>0.1.0</version>
<packaging>apk</packaging>
<properties>
<!-- use UTF-8 for everything -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<android.sdk.path>/home/kleber/android-sdk-linux/</android.sdk.path>
</properties>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>4.1.1.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.9.0-rc.1</version>
<configuration>
<sdk>
<platform>19</platform>
</sdk>
<deleteConflictingFiles>true</deleteConflictingFiles>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<executable>/home/kleber/jdk1.7.0_55/bin/javac</executable>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
</project>
1 ответ
Решение
После быстрой проверки в банке, класс FragmentTabHost не находится в этой библиотеке!
Это основная проблема с поддержкой двух сборок, IDE и CLI, после нескольких обновлений большую часть времени они не совпадают.
Вы можете найти самые обновленные файлы jar в дополнениях sdk... если их там нет, загрузите их через менеджер SDK.
${SDK_HOME}/extras/android/m2repository/com/android/support/support-v4/21.0.0/support-v4-21.0.0.aar
Извлеките его и возьмите из него classes.jar (или преобразуйте его в apklib) и замените его файлом репозитория r6, или установите его как новый jar:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=com.google.android \
-DartifactId=support-v4 -Dversion=21.0.0 -Dpackaging=jar
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>21.0.0</version>
</dependency>