当前位置:首页 » 编程软件 » gradle编译java

gradle编译java

发布时间: 2022-12-21 23:37:08

java,gradle编译spring源码出错

同学,这个问题的原因找到了,因为3.2的版本比较久远,很多类库已经更新变化了,修改的方法就是到gradle 仓库下的C:\Users\Administrator\.gradle\caches\artifacts-24\mole-metadata\com.lowagie\itext\4.2.2\ 找到ivy.xml 修改

将dependency org="com.itextpdf" name="itextpdf" rev="4.2.2" 修改为dependency dependency org="com.itextpdf" name="itextpdf" rev="5.2.0",
然后将使用了该类的AbstractPdfStamperView、AbstractPdfView的import com.itext 修改为 com.itextpdf。。。

具体原因及说明可以看 去http://www.bdtool.net/blog_356.html 查看。

② minecraft我的世界gradle构建,总是失败,求告诉详细教程。不要发网址,要会的人。不会的

最近在项目中遇到一个不大,但是还蛮烦人的问题,在Maven的约定中,一个标准Java项目的代码结构如下:
project
--src
--main
--java
--resources
--test
--java
--resources

当‘gradle idea’构建intelliJ项目文件时,会自动帮忙设置好所有的Source Root,Test Source Root。但是,在我工作的部门中,我们希望可以把测试分为unit,intg2个类别,这样可以更加容易区分测试的目的,同时提供了Build Pipeline分别运行不同类别测试的能力。因此,我们部门内的标准Java项目结构如下:
project
--src
--main
--java
--resources
--test
--common
--java
--unit
--java
--resources
--intg
--java
--resources

有了这个目录结构之后我们剩下2个问题要解决:
1. 如何区分运行IntegrationTest和Unit Test
2. 如何保证‘gradle idea’以后,无需重新设置Test Source Root。因为gradle不具备识别新的代码结构的能力。

如何写一个Gradle Plugin

语言:
Java,Groovy,Scala都可,推荐用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<Project>接口即可,在我的实现代码中,做了两件事,一是定制了项目的代码结构,二是添加了integrationTest Task,该Task只运行*IntegrationTest.class, 这样可以在Build Pipeline分阶段运行Unit Test和IntegrationTest。

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

class ProjectStructurePlugin implements Plugin<Project> {
@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目录下,创建一个文件:<plugin-name>.properties,在该文件中指定Plugin的实现类:

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

在项目中使用该Plugin
首先,需要在build.gradle脚本中引入该Plugin的jar包依赖,可以是以文件的形式,当然个人更推荐的是把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’区别运行UnitTest和IntrgrationTest了。

最后,解决自动设置Test Source Root的问题,只需要在build.gradle为ideaMole 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一样方便,只需要,下载(http://www.gradle.org/downloads )==》解压==》配置环境变量(GRADLE_HOME & PATH),配置好环境变量之后记得使用 source命令使新的环境变量生效。配置成功之后,可以在命令行通过 “gradle -v"验证是否安装成功。

2、Gradle编译Maven风格的java项目
首先,在项目根目录创建"build.gradle"文件,编译java项目需要使用gradle的java插件
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: '<group-id>',name:'<artifact-id>',version:'<version>'
}
,举个例子,假设项目依赖了4.10版本的junit,那么配置就是
Groovy代码
compile group: 'junit',name:'junit',version:'4.10'
另外Depencies还可以按如下方式简写
Groovy代码
compile '<group-id>:<artifact-id>:<version>'
例子
Groovy代码
compile 'junit:junit:4.10'

最后,如何把自己的项目发布到Repository中,
Groovy代码
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
}
}

③ 如何用jenkins+gradle一次性构建多个java工程

根据需要,从官网下载最新jenkins软件包,同时下载最新的gradle软件包,jenkins插件,设置好环境变量,配置好端口,启动。点击新建任务输入项目名称和使用的jdk,同时还输入节点,不输入默认为master节点选择源码管理工具为CVS,Git或subversion,根据自身情况而定,然后填写URL路径@HEAD在构建一栏里增加构建步骤选择InvokeGradlescript,同时选择你的GradleVersion,Switches,RootBuildscript,对于多工程,需要添加多个InvokeGradlescript上传脚本:在每个子工程的根目录下放置名为gradle.build的脚本点击步骤1里面截图的立即构建,通过ConsoleOutput查看结果

④ Gradle--多环境编译打包

前段时间产品经理提了个需求,测试环境,预发布环境,生产环境编译下的app需要在同一步手机同时存在,实现是可以的,但是得有三个环境下的不同applicationId,网络地图key,域名,桌面logo,刚开始是想需要什么环境就换什么类型,很麻烦,每次都要换一次重新编译,我就在想有什么便捷的方法一键设置更换,gradle其中的Flavors功能可以实现我想要的。

这个是主项目中build.gradle中的配置,有三个环境我命名为 xiaoming_test,xiaoming_ready,xiaoming_proct,并有不同的applicationId,BAIDU_MAP_KEY,HTTP_HEAD,HTTP_HEAD_JAVA,app_icon,(解释一下,有两条域名是因为后面后台是用java开发而做的区分),到这里应该大家有疑问,举个栗子,我们一般开发的第三方key是在mainifests进行注册申请的,而我们gradle如何去引用资源的。这里有两种引用方式,直接引用,自定义引用。

引用logo在application的icon属性命名为app_icon,$表示引用这个命名,对应的是gradle的配置。

在mainifests自定义为HTTP_HEAD,value值通过${HTTP_HEAD}引用,getHttpHead()获取自定义注册的域名值。从而实现每次请求对应的域名,只需在gradle里设置。

只需打开studio的BuildVariarts设置,选择需要的环境即可重新编译不同的apk,方便快捷的做到一键设置快速打包。

⑤ Gradle编译-APK编译过程

在早期的Android设备中(Android5.0以下)都是使用的Dalvik虚拟机,Dalvik支持经过转换的.dex文件。.dex格式是专为Dalvik设计的一种适合内存和处理器速度有限的系统。

但是在Android5.0,google用ART全面取代的Dalvik。Android7.0中又添加了JIT编译器,使得Android性能也有不少提升。

上图为从Android源文件开始,最终到APK的过程。
下面博客文章详细介绍了dalvik虚拟机,可供参考学习。
https://www.cnblogs.com/lao-liang/p/5111399.html

dvm(art)和jvm属于不同的虚拟机平台,不同平台要求执行的文件类型也就不一样
dvm(art)--.dex文件
jvm--.class文件

在编译和生成上
java source --.class文件 ---jvm执行
java source --.class文件 ---.dex文件 --- dvm执行

Android Runtime (ART) 是 Android 上的应用和部分系统服务使用的托管式运行时。ART 及其前身 Dalvik 最初是专为 Android 项目打造的。作为运行时的 ART 可执行 Dalvik 可执行文件并遵循 Dex 字节码规范。

ART 和 Dalvik 是运行 Dex 字节码的兼容运行时,因此针对 Dalvik 开发的应用也能在 ART 环境中运作。不过,Dalvik 采用的一些技术并不适用于 ART。

ART的功能
1.预先 (AOT) 编译
使用ART编译器时,应用程序在安装期间就已经把dex字节码翻译并存储在设备上,运行时,只需要执行这些翻译好的就可以了,因此执行速度也快了不少。
2.垃圾回收方面的优化

3.开发和调试方面的优化

构建流程涉及许多将项目转换成 Android 应用软件包 (APK) 的工具和流程。构建流程非常灵活,因此了解它的一些底层工作原理会很有帮助。

⑥ 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/")
}
}

热点内容
安卓手机哪个版本适合玩游戏 发布:2025-07-15 17:12:31 浏览:57
安装flexlinux 发布:2025-07-15 16:35:47 浏览:372
网站模板php 发布:2025-07-15 16:22:47 浏览:248
编译简谱 发布:2025-07-15 16:16:37 浏览:813
编程口是什么 发布:2025-07-15 16:11:28 浏览:497
微博如何从账号和密码登录 发布:2025-07-15 15:59:02 浏览:123
解说电影需要哪些硬件配置 发布:2025-07-15 15:56:59 浏览:380
ftp快捷键搜索文件 发布:2025-07-15 15:51:44 浏览:459
苹果账号密码忘了怎么注销 发布:2025-07-15 15:30:50 浏览:200
自动阅读挂机脚本 发布:2025-07-15 15:20:18 浏览:848