- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在通过 gradle 自动添加依赖项到 eclipse android 项目时遇到问题。我对 gradle 只有一点点经验。到目前为止,我已经用 gradle 构建了两个 java 项目。一个 jar 和一个可执行 jar。这没有问题。我已经使用 eclipse 插件生成 eclipse 项目并将依赖项添加到构建路径。我向 gradle 脚本添加了新的依赖项,使用 gradle eclipse 启动了 gradle,更新了我的项目,依赖项存在于构建路径中,我可以使用它们。这是该脚本的重要部分。
apply plugin: 'java'
apply plugin: 'eclipse'
repositories {
mavenCentral()
}
dependencies {
compile 'commons-io:commons-io:2.4'
}
所以,现在我尝试将它与 android 插件结合使用。这是我的 hole gradle 脚本。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
apply plugin: 'eclipse'
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.commons:commons-lang3:3.1'
}
android {
compileSdkVersion 17
buildToolsVersion "17"
defaultConfig {
minSdkVersion 14
targetSdkVersion 17
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest.setRoot('tests')
}
}
如果我使用 gradle eclipse,什么也不会发生。然后我发现java插件将依赖项添加到构建路径中。所以我加了
apply plugin: 'java'
然后得到java插件与android插件不兼容的错误。然后我找到了一个解决方案,将jar自动复制到项目的lib文件夹中。
def libDir = file('libs')
task copyLibs(type: Copy) {
doFirst {
libDir.mkdirs()
}
from configurations.runtime
into libDir
}
但是这个任务也需要 java 插件用于 configurations.runtime。我需要 android 插件来创建 apk 文件,所以它不是删除 android 插件的解决方案。有人知道是否可以将依赖项添加到与 android 插件兼容的 ecipse 项目中的构建路径或 lib 文件夹中吗?
编辑:我的想法之一是将 java-plugin 放到 eclipse-plugin 中,这样它只会在应用 eclipse 插件时应用。像这样:
apply plugin: 'eclipse'
eclipse{
apply plugin: 'java'
}
但我仍然得到java和android插件不兼容的错误。也许我对 gradle 的理解有误,但通常只有在我启动 eclipse 插件而不是 android 插件时才应应用 java 插件。恐怕我对 gradle 的理解和经验不足以以这种方式解决这个问题或理解为什么这是不可能的。
最佳答案
我的解决方案基于 Rafael's因为它将依赖项复制到仅供 Android 使用的 libs 目录。然而,我进一步完全分解了在 Eclipse 中使用的引用 AAR。
将以下内容添加到您的 Android 项目 build.gradle 的末尾:
task copyJarDependencies(type: Copy) {
description = 'Used for Eclipse. Copies all dependencies to the libs directory. If there are any AAR files it will extract the classes.jar and rename it the same as the AAR file but with a .jar on the end.'
libDir = new File(project.projectDir, '/libs')
println libDir
println 'Adding dependencies from compile configuration'
configurations.compile.filter {it.name.endsWith 'jar'}.each { File file -> moveJarIntoLibs(file)}
println 'Adding dependencies from releaseCompile configuration'
configurations.releaseCompile.filter {it.name.endsWith 'jar'}.each { File file -> moveJarIntoLibs(file)}
println 'Adding dependencies from debugCompile configuration'
configurations.debugCompile.filter {it.name.endsWith 'jar'}.each { File file -> moveJarIntoLibs(file)}
println 'Adding dependencies from instrumentTestCompile configuration'
configurations.instrumentTestCompile.filter {it.name.endsWith 'jar'}.each { File file -> moveJarIntoLibs(file)}
println 'Extracting dependencies from compile configuration'
configurations.compile.filter {it.name.endsWith 'aar'}.each { File file -> moveAndRenameAar(file) }
println 'Extracting dependencies from releaseCompile configuration'
configurations.releaseCompile.filter {it.name.endsWith 'aar'}.each { File file -> moveAndRenameAar(file) }
println 'Extracting dependencies from debugCompile configuration'
configurations.debugCompile.filter {it.name.endsWith 'aar'}.each { File file -> moveAndRenameAar(file) }
println 'Extracting AAR dependencies from instrumentTestCompile configuration'
configurations.instrumentTestCompile.filter {it.name.endsWith 'aar'}.each { File file -> moveAndRenameAar(file) }
}
void moveJarIntoLibs(File file){
println 'Added jar ' + file
copy{
from file
into 'libs'
}
}
void moveAndRenameAar(File file){
println 'Added aar ' + file
def baseFilename = file.name.lastIndexOf('.').with {it != -1 ? file.name[0..<it] : file.name}
// directory excluding the classes.jar
copy{
from zipTree(file)
exclude 'classes.jar'
into 'libs/'+baseFilename
}
// Copies the classes.jar into the libs directory of the expoded AAR.
// In Eclipse you can then import this exploded ar as an Android project
// and then reference not only the classes but also the android resources :D
copy{
from zipTree(file)
include 'classes.jar'
into 'libs/' + baseFilename +'/libs'
rename { String fileName ->
fileName.replace('classes.jar', baseFilename + '.jar')
}
}
}
运行:
“gradle clean build”
您应该在 libs 目录中找到所有依赖项和展开的 AAR。这就是 Eclipse 应该需要的全部内容。
现在这就是真正的好处开始的地方。从上面的 gradle 步骤生成 libs 目录后,您会注意到那里也有文件夹。这些新文件夹是来自您的 build.gradle 文件的展开的 AAR 依赖项。
现在很酷的部分是,当您将现有的 Android 项目导入 Eclipse 时,它还会检测展开的 AAR 文件夹作为它也可以导入的项目!
1. 在项目的 libs 目录下导入这些文件夹,不要导入任何“构建”文件夹,它们是由 Gradle 生成的
2. 确保对您添加的所有 AAR 项目执行项目 -> 清理。在您的工作区中,检查每个 AAR 展开的项目在 project.properties 中是否具有以下内容:
target=android-<YOUR INSTALLED SKD VERSION GOES HERE>
android.library=true
3. 现在在您的主要 Android 项目中,您可以使用 ADT 添加库引用,或者您可以编辑 project.properties 文件并添加
android.libraries.reference.1=libs/someExplodedAAR/
4. 现在您可以右键单击您的主要 Android 项目并运行方式 -> Android 应用程序。
嗯,这意味着您不需要任何 Android AAR Gradle 依赖项的源代码即可在 Eclipse 中引用它的类和资源。
上面的 gradle 构建脚本获取 AAR 文件并准备好在 Eclipse 中使用。将它添加到工作区后,您就可以专注于实际的主要 Android 项目了。
您现在可以使用 Eclipse 进行调试和开发,并使用 ADT 进行部署,AAR 依赖项已正确 bundle 在 APK 中。当您需要进行一些特定的构建时,您可以使用 gradle。
关于android - 在android项目中通过gradle添加依赖到eclipse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16709305/
我想在文件系统上手动创建文件夹/文件,以便在 eclipse 的工作区中创建新项目,并在启动 eclipse 并选择工作区时显示在项目资源管理器中。 执行此操作需要创建哪些文件,它们需要位于何处? 请
我正在关注these instructions ,但在运行 mvn eclipse:eclipse 等命令时遇到问题。 我应该如何以及在哪里运行该命令? 我的设置: Windows 7 32 位 面向
是否有任何命令可以在不实际启动 eclipse 的情况下创建 eclipse 工作区?我希望该命令成为脚本的一部分。创建工作区后,将对其进行配置(例如文本编码),然后用于将项目导入到 RTC。我知道下
我想为 Eclipse 插件创建一个自动安装程序(即不通过“更新管理器”)。我的场景很简单:用户关闭 Eclipse,将下载的 JAR 放入 dropins 文件夹,启动 Eclipse,其余的过程是
每当我们想要使用现有源位置创建 Eclipse 项目时,我们将选择现有源位置(根)作为项目位置。 Eclipse 将在该源的根目录中创建所有项目特定文件。 现在,出于某种原因,如果我们想用不同的设置重
可能被问过多次; 有没有办法从控制台(Linux 或 Windows)刷新 Eclipse 工作区文件夹。 我知道有 Ant 任务可以做到这一点。但很想知道是否有命令行技巧。 最佳答案 不,您能做的最
我说的是工具栏上的小图标。 网络上似乎没有任何这样的问题,它们都指的是 android 或自定义应用程序,而不是与 eclipse 捆绑在一起的图标。 我想知道是否有人尝试过这个,或者可以告诉我它不值
如何使用 Eclipse 比较两个文件? (目前我正在使用 WinMerge 。) 最佳答案 要在 Eclipse 中比较两个文件,请首先在 Project Explorer/Package Expl
我正在尝试将我在一个带有数据库的 Eclipse JEE6 项目中所做的所有工作转移到另一个 Eclipse 程序。我知道我将不得不重新配置很多并重建很多库文件,但是尽可能多地传输的最简单方法是什么?
在 Eclipse 中加载我的工作台并启用 TFS 插件时,它挂起。与此类似: http://social.msdn.microsoft.com/Forums/vstudio/en-US/85c1d3
Eclipse 可以通过插件包含许多不同的功能集。您是否在一个 Eclipse 中安装所有插件?或者您是否从 spring 安装 STS,从 adobe 安装 Flex eclipse,甚至从 ecl
我错误地单击了“在 Eclipse 首选项中将目标运行标记为忽略在 Eclipse 构建中(实验)”: 在哪里/如何撤消此操作? 最佳答案 m2e 使用文件 YOUR_WORKSPACE/.metad
我是 Maven 新手。我尝试执行 >mvn eclipse:eclipse -Dwtpversion=2.0。但我收到以下错误: D:\test\CounterWebApp>mvn eclips
当我运行多个 Eclipse 实例时,操作系统不断请求上述权限。 我已经授予了该权限,并且我尝试了多次禁用和启用该权限。 我正在使用, macOS Catalina(版本:10.15.3 (19D76
我有一个 Maven 项目,其中我在项目构建期间使用 wsimport 作为目标来使用 Web 服务。 org.codehaus.mojo
当尝试使用 eclipse 新软件功能安装 eclipse 时,出现此错误: Cannot complete the install because one or more required item
我已经下载了整个 Eclipse Helios/Indigo 版本的源代码。现在我想对它进行一些修改等等。所以我导入了整个源代码,但现在我在编译时遇到了 n 个错误。此外,我正在尝试 RunAs> 插
我已经安装了 eclipse Oxygen 并且正在尝试连接到 Eclipse 市场,以安装插件,它给出了以下异常 - org.eclipse.equinox.p2.core.ProvisionExc
我的 IDE 中安装了来自 Sonatype 的 m2Eclipse 插件。它允许我通过右键单击 pom.xml 文件并导航到“运行方式”菜单来运行各种 Maven 命令(打包、安装等)。 但是,我还
我在 Windows7 64 位上运行 Maven 3 时遇到问题。当我执行maven eclipse:eclipse(我使用maven-eclipse-plugin 2.8)时,maven不会创建任
我是一名优秀的程序员,十分优秀!