导航:首页 > 程序命令 > gradle编译命令

gradle编译命令

发布时间:2022-05-09 17:17:32

① 如何通俗地理解 Gradle

来自知乎:


如何通俗地理解 Gradle?

我以前一直用 Eclipse with ADT 来开发android 项目,而且对它的基础的原理掌握不深,直接上手开发的,没有去考虑太多的东西。现在手头上有一个新的项目要使用到Android Studio ,我早有耳闻AS大名,但是由于本人才疏学浅,这几天在学习AS的过程中对Gradle这个东西表示很不能理解,找了很多资料但是都描述得很专业,所以想问问各位,有没有什么比较形象易懂的解释来描述一下Gradle,它是什么东西,它有什么用,相对于Eclipse with ADT 中编译Android 程序的机制,他有什么优势?


ghui

谢邀

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于java、Groovy和Scala,计划未来将支持更多的语言。

上面是维基上对Gradle的解释,相信一个没有接触过构建的人是不大能看明白的,当初我也是.下面是我对Gradle通俗的理解:

软件开发讲究代码复用,通过复用可以使工程更易维护,代码量更少..... 开发者可以通过继承,组合,函数模块等实现不同程度上的代码复用.但不知你有没有想过,软件开发也是一种工程作业,绝不仅仅是写代码,还涉及到工程的各种管理(依赖,打包,部署,发布,各种渠道的差异管理.....),你每天都在build,clean,签名,打包,发布,有没有想过这种过程,也可以像代码一样被描述出来, 也可以被复用.

举个例子

我是做Android开发的,你可知道国内有n个Android市场,n个手机品牌,n个手机尺寸......,一般公司都会针对不同的市场单独发包用来统计不同渠道的下载量等情况,可能需要针对不同(品牌,尺寸等各种硬件信息)的手机做一些特殊的处理,这个时候你可以针对不同的情况单独建一个工程,或者更好一点你可以通过一些变量来控制,像这样:

if(isMoto){do something} else if(isHuawei){do something} ...

差异管理

但这两种解决方法都有自己的缺点,特别是前一种有极大的代码重复.后一种稍微好一点,但这种方式的差异是运行时的,不是静态的,对于moto手机上的处理逻辑对华为手机来说一点作用也没有,但这一段针对moto手机的处理逻辑也被装到了华为手机上了,通过gradle的proctFlavor与buildtype可以实现静态级的差异控制可以参考如何通过Gradle实现一套代码开发不同特性的APK · ByGhui

说到前面的多渠道问题,不同的渠道一般会对应不同的渠道号,你当然可以通过修改一次打一个包这种纯手工的方式来生成你的多渠道包,但据听说国内某团购网站的Android App有100多个渠道.这里出现了什么?重复,反复的去打包而且这些包之前的差异很小(只是渠道号不同),和写代码一样我们应该复用,通过Gradle可以实现一个命令打出所有的渠道包,一个命令打出指定的渠道包.再复杂一点,你可能需要不同的渠道对应不同的签名文件,不同的icon,不同的服务器地址...这些都可以通过Gradle来方便的实现.

依赖管理:

做软件开发你可能需要依赖各种不同的jar,library.你当然可以通过将.jar/library工程下载到本地再到你的工程中,但不知你是否听说过国外有个叫中央仓库的东西,在这个仓库里你可以找到所有你能想到以及你从来没听说过的jar,aar...The Central Repository Search Engine这里可以找到所有你需要的依赖,而你需要的只是指定一个坐标,如下:

<img src="https://pic4.mg.com/_b.jpg" data-rawwidth="330" data-rawheight="24" class="content_image" width="330">剩下的依赖的寻找,下载,添加到classpath等你都不需要去关心,通过这种方式来维护依赖的好处有以下几点:

剩下的依赖的寻找,下载,添加到classpath等你都不需要去关心,通过这种方式来维护依赖的好处有以下几点:

依赖不会进入到你的版本控制仓库中(默认会缓存到~/.gradle/下)

方便卸载装载依赖(只是一条坐标依赖,不需要删除即可)

方便的版本管理,如上图中的2.3.3既是picasso的版本号,若改为+就表示从中央仓库中下载最新的版本

不同工程的相同依赖不会存在重复副本(只在~/.gradle下存在一份)

项目部署

这方面我没怎么接触过,但据我所知通过一些插件,可以实现自动将你的输出(.jar,.apk,.war...)上传到指定仓库,自动部署...

罗哩罗嗦说了这么多,不知大家有没有理解

总结一下:

Gradle是一种构建工具,它可以帮你管理项目中的差异,依赖,编译,打包,部署......,你可以定义满足自己需要的构建逻辑,写入到build.gradle中供日后复用.

Gradle不是一种编程语言,它不能帮你实现软件中的任何实际功能

通俗的解释肯定是不严谨的解释,不妥之处欢迎讨论.

###

赞同过百,放出之前相关分享的幻灯片

###

截止到现在(1432311622353)共收到342个赞同与感谢,再次感谢大家的支持!如果你觉得我的分享对你有帮助,请关注我! 以后我会分享更多更优质的内容给大家.

说好的幻灯片在这里

(是之前在乐视时一次内部分享的幻灯片,内容有删减(涉及到公司具体项目的部分),此幻灯片参考了很多其它的资料,内部的链接很值得大家打开看看)


编辑于 2017-02-2753 条评论感谢


nonesuccess

你都说了要通俗的理解,那就用不着学习什么理论了,通俗着来就是了。

通俗的说:gradle是打包用的。

你觉得解决你的问题了吗?如果没解决,那是你的问题提得不够好。比如我猜你应该提:为什么要打包发布,打包发布有几种常见方法,为什么这些常见方法中要选gradle,等等。

针对我猜的这些内容,通俗的讲是这样的:

以在eclipse里面写java程序为例

为什么需要打包:
最初写完了,直接右键run就可以了。但是程序写完了毕竟是要发布到服务器上或者给别人用的,你第一不可能让所有要运行的人都装个eclipse,第二不可能把源代码公布给所有人。所以你需要把你的代码发布成二进制形式,让其它环境方便运行,这就是打包。

为什么用ant
打包的时候要做很多事,比如说配置文件中的用户名和密码,你本地开发和程序实际运行时的内容肯定不一致,所以需要有两个文件,开发的时候用一个,实际运行的时候用一个。这样每次打包的时候都要重复的做这些事,ant可以让你用xml的形式把这些事情写成脚本,然后自动运行。

为什么用maven
你的项目要用很多jar包,比如你写日志要用个log4j吧,连数据库要用个connector吧。这年头写程序不用个spring都不好意思出门,下载下来的spring包打开一看,密密麻麻的好几十个jar,不知道用哪个不用哪个。而且,即便是你一狠心把这些jar包都放进来,很大可能性还是不能运行,因为还要依赖其它的jar包。哪天想升级个spring小版本,所有jar包都要重来一遍,你也不记得哪些是由于spring引进来的jar包了。
所以有了maven,你只要配置一下说我要用spring 3,所有jar包都给你下载好了,你直接运行就行了。赶明儿想升级版本,直接把3改成4,新的jar包也给你下载好了。

然后?
用了maven,jar包是方便了,但我打包的时候还是有好多事要做啊,然后你会发现maven实在是不知道怎么做这些事,于是开始怀念ant。
gradle就是又能干maven的活,又能干ant的活,用groove语言写脚本,表达能力还更强。

就这意思。


===
我也是这两天才看了两眼gradle,了解不深。简化版如下:

ant可以自动化打包逻辑。
maven也可以自动化打包,相比于ant,它多做的事是帮你下载jar包。
但是maven的打包逻辑太死板,定制起来太麻烦,不如ant好用。gradle就是又能自动下jar包,又能自己写脚本,并且脚本写起来还比ant好用的这么个东西。

② Gradle 的任务怎么执行gradle 命令

terminal到你当前project的目录:
windows下: 输入gradlew yourTaskName就好,比如gradlew tasks 输出各种task
linux下:输入.\gradlew yourTaskName

③ eclipse怎么配置gradle

一、Gradle简介

Gradle 是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。

二、配置步骤如下:

1、资源下载:

Grandle官网下载Gradle

④ gradle配置不成功,求助贴

近项目遇蛮烦问题Maven约定标准Java项目代码结构:
project
--src
--main
--java
--resources
--test
--java
--resources

‘gradle idea’构建intelliJ项目文件自帮忙设置所Source RootTest Source Root我工作部门我希望测试unitintg2类别更加容易区测试目同提供Build Pipeline别运行同类别测试能力我部门内标准Java项目结构:
project
--src
--main
--java
--resources
--test
--common
--java
--unit
--java
--resources
--intg
--java
--resources

目录结构我剩2问题要解决:
1. 何区运行IntegrationTestUnit Test
2. 何保证‘gradle idea’需重新设置Test Source Rootgradle具备识别新代码结构能力

何写Gradle Plugin

语言:
JavaGroovyScala都推荐用Groovy,毕竟Gradle本质说用Groovy写DSL使用Groovy更致点

注入式:
Gradle支持3种形式定制Plugin注入:

1. 直接Plugin源代码直接写Build Script面
2. Pluigin源代码写rootProjectDir/buildSrc/src/main/groovy目录
3. 用单独project写Plugin源代码jar依赖形式注入项目

觉都想要自写Plugin定项目公用Plugin否则直接Plugin代码直接写脚本要定制Plugin我看定需要单独jar形式注入

写project-structure Plugin:
Gradle写Plugin非简单首先添加项目依赖我使用Groovy写插件所添加localGroovy依赖

Gradle代码
apply plugin: 'groovy'

dependencies {
compile gradleApi()
compile localGroovy()
}

写Plugin实现代码实现代码需要实现Plugin接口即我实现代码做两件事定制项目代码结构二添加integrationTest Task该Task运行*IntegrationTest.class, Build Pipeline阶段运行Unit TestIntegrationTest

Groovy代码
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.testing.Test

class ProjectStructurePlugin implements Plugin {
@Override
void apply(Project project) {
project.logger.info "Configuring Project Structure for $project.name"

project.configurations {
integrationTestCompile { extendsFrom testCompile }
integrationTestRuntime { extendsFrom integrationTestCompile, testRuntime }
}
configureSourceSets(project)
addIntegrationTestTask(project)
}

private void addIntegrationTestTask(Project project) {
Test intgTest = project.getTasks().create("integrationTest", Test.class);
intgTest.testClassesDir = project.sourceSets.integrationTest.output.classesDir
intgTest.includes = ["**/*IntegrationTest.class"]
intgTest.inputs.dir 'src'
intgTest.outputs.dir project.sourceSets.integrationTest.output.classesDir
project.check.dependsOn project.integrationTest
intgTest.dependsOn project.test
}

private void configureSourceSets(Project project) {
project.sourceSets {
test {
java {
srcDir 'src/test/unit/java'
srcDir 'src/test/common/java'
}
resources {
srcDir 'src/test/unit/resources'
}
}

integrationTest {
java {
srcDir 'src/test/intg/java'
srcDir 'src/test/common/java'
}
resources {
srcDir 'src/test/intg/resources'
}
compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile
runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime
}
}
}
}

接着项目src/main/resources/META-INF/gradle-plugins目录创建文件:.properties,该文件指定Plugin实现类:

Java代码
implementation-class=com.xianlinbox.plugins.ProjectStructurePlugin

项目使用该Plugin
首先需要build.gradle脚本引入该Pluginjar包依赖文件形式更推荐jar包发布Maven库Maven依赖形式注入本例使用本文件依赖:

Groovy代码
buildscript {
dependencies {
classpath fileTree(dir: 'libs', include: '*.jar')
}
}
注入编写插件注意该插件必须java plugin起使用其使用SourceSets属性该插件引入进:

Groovy代码
apply plugin: 'java'
apply plugin: 'project-structure'

插件通‘gradle test’‘gradle integrationtTest’区别运行UnitTestIntrgrationTest

解决自设置Test Source Root问题需要build.gradleideaMole Task增加识别Test Source Root能力即:

Groovy代码
apply plugin: 'idea'
...
idea {
mole {
testSourceDirs += file('src/test/intg/java')
testSourceDirs += file('src/test/intg/resources')
}
}

我写Plugin设置Project-Structrue:

Groovy代码
......
compileClasspath = project.sourceSets.main.output + project.sourceSets.test.output + project.configurations.integrationTestCompile
runtimeClasspath = output + compileClasspath + project.configurations.integrationTestRuntime
project.idea {
mole {
testSourceDirs = testSourceDirs + new File('src/test/intg/java') + new File('src/test/intg/resources')
}
}
1、安装
Gradle安装Maven便需要载( )==》解压==》配置环境变量(GRADLE_HOME & PATH)配置环境变量记使用 source命令使新环境变量效配置功命令行通 gradle -v"验证否安装功

2、Gradle编译Maven风格java项目
首先项目根目录创建"build.gradle"文件编译java项目需要使用gradlejava插件
Groovy代码
apply plugin: 'java'
,要集maven功能需要添加maven插件
Groovy代码
apply plugin: 'maven'[

接着配置项目Repository风格
Groovy代码
repositories{
mavenCentral();
}
面例使用默认maven央库想用自本库通式配置
Groovy代码
def localMavenRepo = 'file://' + new File(System.getProperty('user.home'), '.m2/repository').absolutePath
repositories {
// Use local Maven repo location. We don't need this if we only want to install
// an artifact, but we do need it if we want to use dependencies from the local
// repository.
mavenRepo urls: localMavenRepo
mavenCentral()
}

再配置项目依赖第三库配置模板:
Groovy代码
dependencies{
compile group: '',name:'',version:''
}
举例假设项目依赖4.10版本junit配置
Groovy代码
compile group: 'junit',name:'junit',version:'4.10'
另外Depencies按式简写
Groovy代码
compile '::'

Groovy代码
compile 'junit:junit:4.10'

何自项目发布Repository
Groovy代码
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}

⑤ 如何 gradle build

1. 为什么选择Gradle?

2. 简单入门
2.1 使用Intellij Idea创建gradle项目
首先在Idea中启用Gradle支持:Settings->Plugins: Gradle
然后创建一个gradle项目或模块,会发现目录结构和maven的很像,其中build.gradle是gradle的配置文件,类似于maven中pom.xml文件,以下是build.gradle的简单示例:
apply plugin: 'java'

group = 'org.yousharp'
version = '1.0-SNAPSHOT'

sourceCompatibility = 1.7
targetCompatibility = 1.7

repositories {
mavenCentral()
maven { url "repo.maven.apache.org/maven2" }
}
dependencies {
compile group: 'com.google.guava', name: 'guava', version:'17.0'
compile group: 'redis.clients', name: 'jedis', version:'2.6.0'
testCompile group: 'junit', name: 'junit', version:'4.11'
}

插件(plugin):是gradle的一种扩展,gradle预定义了很多插件,常见的如java插件、war插件等;java插件中定义了一些有用的task,如编译源码、执行单元测试、生成jar包、约定默认的目录结构等; repositories定义仓库,dependencies定义项目的依赖,比maven的XML定义更简洁;
那么,如何编译、测试,以及运行gradle的项目呢?
刚才说到java插件预定义了很多task,其中就包括编译、测试、生成jar包等task,可以在命令行通过 $ gradle tasks 查看项目已定义的所有task以及含义,如java插件中常用的task有:
+ assemble: 编译
+ build:编译并执行测试
+ clean:删除build目录
+ jar: 生成jar包
+ test:执行单元测试

2.2 将Java项目从maven迁移到gradle
如何将一个java项目从maven迁移到gradle呢?gradle集成了一个很方便的插件:Build Init Plugin,使用这个插件可以很方便地创建一个新的gradle项目,或者将其它类型的项目转换为gradle项目。
要将maven项目转换为gradle项目,只需要在项目的pom文件所在的目录下执行以下命令:
$ gradle init --type pom

上面的命令会根据pom文件自动生成gradle项目所需的文件和配置,然后以gradle项目重新导入即可。

⑥ gradle.properties文件在哪

通常在项目的根目录,在Android Studio 创建一个项目的时候,根目录下会生成gradle.properties和local.properties文件。

properties的数据格式:

采用键值对的方式,写法:key=value

(6)gradle编译命令扩展阅读

项目结构

1、app/build:app模块编译输出的文件。

2、app/libs: 放置引用的类库文件。

3、app/src: 放置应用的主要文件目录。

4、app/src/androidTest:单元测试目录。

5、app/src/main:主要的项目目录和代码。

6、app/src/main/assets:放置原生文件,里面的文件会保留原有格式,文件的读取需要通过流。

7、app/src/main/java:项目的源代码。

8、build:系统生成的文件目录。

9、gradle: wrapper的jar和配置文件所在的位置。

10、.gitattributes:用于设置文件的对比方式。

11、.gitignore: 忽略的文件或者目录。

12、build.gradle:项目的gradle编译文件。

13、gradle.properties: gradle相关的全局属性设置。

14、gradlew: 编译脚本,可以在命令行执行打包。

15、gradlew.bat:windows下的gradle wrapper可执行文件。

16、local.properties:配置SDK/NDK所在的路径。

17、MyApplication.iml:保存该模块的相关信息。

18、README.md:文本编辑器,记录一些相关信息。

19、settings.gradle:设置相关的gradle脚本。

20、External Libraries:项目依赖的库,编译时自动下载。

⑦ gradle 内置了哪些tasks

1. 为什么选择Gradle?

2. 简单入门
2.1 使用Intellij Idea创建gradle项目
首先在Idea中启用Gradle支持:Settings->Plugins: Gradle
然后创建一个gradle项目或模块,会发现目录结构和maven的很像,其中build.gradle是gradle的配置文件,类似于maven中pom.xml文件,以下是build.gradle的简单示例:
apply plugin: 'java'

group = 'org.yousharp'
version = '1.0-SNAPSHOT'

sourceCompatibility = 1.7
targetCompatibility = 1.7

repositories {
mavenCentral()
maven { url "http://repo.maven.apache.org/maven2" }
}
dependencies {
compile group: 'com.google.guava', name: 'guava', version:'17.0'
compile group: 'redis.clients', name: 'jedis', version:'2.6.0'
testCompile group: 'junit', name: 'junit', version:'4.11'
}

插件(plugin):是gradle的一种扩展,gradle预定义了很多插件,常见的如java插件、war插件等;java插件中定义了一些有用的task,如编译源码、执行单元测试、生成jar包、约定默认的目录结构等; repositories定义仓库,dependencies定义项目的依赖,比maven的XML定义更简洁;
那么,如何编译、测试,以及运行gradle的项目呢?
刚才说到java插件预定义了很多task,其中就包括编译、测试、生成jar包等task,可以在命令行通过 $ gradle tasks 查看项目已定义的所有task以及含义,如java插件中常用的task有:
+ assemble: 编译
+ build:编译并执行测试
+ clean:删除build目录
+ jar: 生成jar包
+ test:执行单元测试

2.2 将Java项目从maven迁移到gradle
如何将一个java项目从maven迁移到gradle呢?gradle集成了一个很方便的插件:Build Init Plugin,使用这个插件可以很方便地创建一个新的gradle项目,或者将其它类型的项目转换为gradle项目。
要将maven项目转换为gradle项目,只需要在项目的pom文件所在的目录下执行以下命令:
$ gradle init --type pom

上面的命令会根据pom文件自动生成gradle项目所需的文件和配置,然后以gradle项目重新导入即可。

⑧ 如何在 Eclipse 下用 Gradle 构建 Web Application

使用的环境是: Eclipse IDE for Java EE Developers Kepler + JDK 1.7.

好, 下面正式开始:

1.安装 Gradle 插件. 在 Eclipse Marketplace 中搜索 Gradle, 选择安装 Gradle Integration for Eclipse

2.新建一个 Dynamic Web Project, 在项目根目录下新建 build.gradle 文件, 并向其中写入如下内容:

importorg.gradle.plugins.ide.eclipse.model.Facet

applyplugin:'java'
applyplugin:'war'
applyplugin:'eclipse-wtp'

sourceCompatibility=1.7//设置JDK版本
webAppDirName='WebContent'//设置WebApp根目录
sourceSets.main.java.srcDir'src'//设置Java源码所在目录

//设置maven库地址
repositories{
mavenCentral()//中央库
//maven{url'http://maven.oschina.net/content/groups/public/'}//自定义库地址
}

//设置依赖
dependencies{
providedCompile'javax.servlet:servlet-api:2.5'//编译期
providedRuntime'javax.servlet:jstl:1.2'//运行时
}

//设置ProjectFacets
eclipse{
wtp{
facet{
facetname:'jst.web',type:Facet.FacetType.fixed
facetname:'wst.jsdt.web',type:Facet.FacetType.fixed
facetname:'jst.java',type:Facet.FacetType.fixed
facetname:'jst.web',version:'3.0'
facetname:'jst.java',version:'1.7'
facetname:'wst.jsdt.web',version:'1.0'
}
}
}

3.接下来在项目上右击 -> configure -> convert to Gradle project

4.再次在项目上右击 -> Gradle -> Refresh All

5.如果没有 web.xml 文件的话, 再右击项目 -> Java EE Tools -> Generate Deployment Descriptor Stub

6.最后看下效果如何, 在 WebContent 下新建 index.jsp 里面随便写点什么, 然后项目上右击 -> Run As -> Run on Server

如果成功显示的话那么就一切 OK 了.

⑨ gradle可以编译android源码吗

方法/步骤

1
(可以省略)通过cmd命令行下载gradle源码:
git clone https://github.com/spring-guides/gs-gradle-android.git
2
下载最新的gradle安装包,地址:
http://gradle.org/downloads
点击下载二进制文件

3
解压到d盘,路径为:D:\gradle-2.4
4
打开“计算机”-“右键”-“属性”-“更改设置”-“高级”-“环境变量”,
在系统变量中,点击新建,属性名为GRADLE_HOME,属性值为"D:\gradle-2.4"

5
打开“计算机”-“右键”-“属性”-“更改设置”-“高级”-“环境变量”,
在系统变量中,找到Path,将";D:\gradle-2.4\bin"加入到Path中

6
打开cmd命令行,执行gradle,如果出现如图所示,则说明gradle安装成功

7
打开cmd命令行,进入android工程目录,找到build.gradle文件,在目录执行执行
gradle build
既可开始使用gradle打包apk,在成功后会在同目录生成build文件夹

阅读全文

与gradle编译命令相关的资料

热点内容
pdf在线查看 浏览:953
安卓tv90如何关闭后台 浏览:682
php读取word乱码 浏览:753
minicom源码 浏览:1000
海尔冷柜压缩机 浏览:415
联通服务器如何调试信号 浏览:135
stata新命令 浏览:940
单调栈算法python 浏览:605
微信解压游戏怎么下载 浏览:961
忍三服务器不同如何登上账号 浏览:821
php求积 浏览:294
封面命令 浏览:879
手机复制文件夹到另一个文件夹 浏览:992
手游为什么不能统一下服务器 浏览:246
iphone上pdf 浏览:884
window定时python脚本 浏览:64
怎么运行cmd命令行 浏览:366
php中类的继承 浏览:228
openvpnlinux安装配置 浏览:463
PHP7从入门到精通 浏览:27