如何将Robolectric、Maven、ActionBarSherlock(最好是IntelliJ)集成到Android项目中?
一段时间以来,我一直在努力让maven、robolectric、actionbar sherlock和intellij都玩得很好。我现在已经放弃了与intellij的合作,而专注于maven 当我跳过maven构建中的测试时,我有一个带有操作栏的应用程序(这告诉我,我很适合使用操作栏集成)。IntelliJ构建在ManifestParsingTest.java上失败,抱怨它不知道junit在哪里(还有其他问题) 机器人分子集成 我已经在项目中成功运行了Robolectric。我将文件从复制到如何将Robolectric、Maven、ActionBarSherlock(最好是IntelliJ)集成到Android项目中?,android,maven,intellij-idea,actionbarsherlock,robolectric,Android,Maven,Intellij Idea,Actionbarsherlock,Robolectric,一段时间以来,我一直在努力让maven、robolectric、actionbar sherlock和intellij都玩得很好。我现在已经放弃了与intellij的合作,而专注于maven 当我跳过maven构建中的测试时,我有一个带有操作栏的应用程序(这告诉我,我很适合使用操作栏集成)。IntelliJ构建在ManifestParsingTest.java上失败,抱怨它不知道junit在哪里(还有其他问题) 机器人分子集成 我已经在项目中成功运行了Robolectric。我将文件从复制到sr
src/test/java/com/blah/blah/support/
(除了ShadowSherlockFragmentActivity.java
中,它位于src/test/java/com/blah/blah/support/shadows/
中),并将此行放入自定义测试运行程序的构造函数中(位于support
文件夹中):
mvn错误
我遇到了这些构建错误(IntelliJ同样也有红色的曲线):
[ERROR]未能在项目Blah上执行goal org.apache.maven.plugins:maven编译器插件:3.0:testCompile(默认testCompile):编译失败:编译失败:
[错误]/Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/sherlocksourceloader.java:[29,9]找不到符号
[错误]符号:构造函数ResourceLoader(int、java.lang.Class、java.util.List、java.io.File)
[错误]位置:class com.xtremelabs.roblectric.res.ResourceLoader
[错误]/Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/SherlockResourceLoader.java:[45,5]方法不重写或实现超类型中的方法
[错误]/Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/ActionBarSherlockTestRunner.java:[39,37]resourceLoaderForRootAndDirectory在com.xtremelabs.roblectric.roblectrictTestRunner中具有私有访问权限
[错误]/Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/ActionBarSherlockTestRunner.java:[47,30]找不到符号
[错误]符号:方法getResourcePath()
[错误]位置:class com.xtremelabs.roblectric.roblectricconfig
[错误]/Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/ActionBarSherlockTestRunner.java:[48,9]resourceLoaderForRootAndDirectory在com.xtremelabs.roblectric.roblectrictTestRunner中具有私有访问权限
[错误]/Users/clatislaw/Documents/Code/Android/projectName/src/test/java/com/blah/blah/support/ActionBarSherlockTestRunner.java:[38,3]方法不重写或实现超类型中的方法
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>com.blah.blah</groupId>
<artifactId>projectName</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>apk</packaging>
<name>Project Name App</name>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>4.0.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.pivotallabs</groupId>
<artifactId>robolectric</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r6</version>
</dependency>
<dependency>
<groupId>com.actionbarsherlock</groupId>
<artifactId>library</artifactId>
<version>4.1.0</version>
<type>apklib</type>
</dependency>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<!-- See http://code.google.com/p/maven-android-plugin/ -->
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<sdk>
<platform>15</platform>
</sdk>
</configuration>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>
4.0.0
等等
项目名称
1.0.0-SNAPSHOT
apk
项目名称应用程序
com.google.android
安卓
4.0.1.2
假如
com.pivotallabs
生物分子
1.1
测试
朱尼特
朱尼特
4.8.2
测试
com.google.android
支持-v4
r6
com.actionbarsherlock
图书馆
4.1.0
apklib
${project.artifactId}
com.jayway.maven.plugins.android.generation2
安卓maven插件
3.2.0
15
真的
是否缺少一些项目配置?位于Square,以支持我们使用的这个用例。我们正在与Pivotal合作,以使我们不再使用fork和向主存储库上游进行必要的更改。所需的更改是资源加载系统的挂钩。这些方法目前是私有的,这是您看到的编译失败的原因 Pivotal并不以任何频繁的方式发布版本,因此,如果更改确实使其处于上游,您可能需要使用
快照版本一段时间。我可以让它工作
试试这个:
- 将robolectric和junit依赖项移到末尾
- 在build标记中,在finalname之后和plugins之前指示src和测试路径
- 从maven工具栏重建并运行测试
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>4.0.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r6</version>
</dependency>
<dependency>
<groupId>org.roboguice</groupId>
<artifactId>roboguice</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.octo.android.robospice</groupId>
<artifactId>robospice-spring-android</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.9</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.actionbarsherlock</groupId>
<artifactId>actionbarsherlock</artifactId>
<version>4.2.0</version>
<type>apklib</type>
</dependency>
<dependency>
<groupId>com.actionbarsherlock</groupId>
<artifactId>actionbarsherlock</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>com.pivotallabs</groupId>
<artifactId>robolectric</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<plugins>
<plugin>
<!-- See http://code.google.com/p/maven-android-plugin/ -->
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<sdk>
<platform>15</platform>
</sdk>
</configuration>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
com.google.android
安卓
4.0.1.2
假如
com.google.android
支持-v4
r6
org.roboguice
机器人向导
2
com.octo.android.robospice
机器人世界之春机器人
1.2.0
org.codehaus.jackson
杰克逊地图绘制者
1.9.9
com.google.code.gson
格森
2.2.2
com.actionbarsherlock
actionbarsherlock
4.2.0
apklib
com.actionbarsherlock
actionbarsherlock
4.2.0
com.pivotallabs
生物分子
1.1
测试
朱尼特
朱尼特
4.8.2
测试
${project.artifactId}
src
测试
com.jayway.maven.plugins.android.generation2
安卓maven插件
3.2.0
15
真的
robolectric的1.2-SNAPSHOT版本是否也会出现相同的错误?@redwoolf:在pom中将版本设置为1.2-SNAPSHOT时出现此错误:“com.pivotallabs:robolectric:jar:1.2-SNAPSHOT的pom丢失,没有可用的依赖项信息。”是否有其他方法可以获取快照?是的,您需要将快照repo添加到pom或设置中。请参见链接“谢谢”。我更新了设置,但仍然失败。这是因为square的更改并没有被合并到主线Robolectric中(见下面的答案)
<?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>com.blah.blah</groupId>
<artifactId>projectName</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>apk</packaging>
<name>Project Name App</name>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>4.0.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.pivotallabs</groupId>
<artifactId>robolectric</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r6</version>
</dependency>
<dependency>
<groupId>com.actionbarsherlock</groupId>
<artifactId>library</artifactId>
<version>4.1.0</version>
<type>apklib</type>
</dependency>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<!-- See http://code.google.com/p/maven-android-plugin/ -->
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<sdk>
<platform>15</platform>
</sdk>
</configuration>
<extensions>true</extensions>
</plugin>
</plugins>
</build>
</project>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>4.0.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r6</version>
</dependency>
<dependency>
<groupId>org.roboguice</groupId>
<artifactId>roboguice</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.octo.android.robospice</groupId>
<artifactId>robospice-spring-android</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.9</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.actionbarsherlock</groupId>
<artifactId>actionbarsherlock</artifactId>
<version>4.2.0</version>
<type>apklib</type>
</dependency>
<dependency>
<groupId>com.actionbarsherlock</groupId>
<artifactId>actionbarsherlock</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>com.pivotallabs</groupId>
<artifactId>robolectric</artifactId>
<version>1.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<plugins>
<plugin>
<!-- See http://code.google.com/p/maven-android-plugin/ -->
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<sdk>
<platform>15</platform>
</sdk>
</configuration>
<extensions>true</extensions>
</plugin>
</plugins>
</build>