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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了minecraft我的世界gradle构建,总是失败,求告诉详细教程。不要发网址,要会的人。不会的相关的知识,希望对你有一定的参考价值。

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为ideaModule Task增加识别Test Source Root的能力即可:

Groovy代码
apply plugin: 'idea'
...
idea
module
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
module
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/")

追问

不要你复制

追答

.

追问

追答

.

追问

追答

好玩,继续

追问

参考技术A

以上是关于minecraft我的世界gradle构建,总是失败,求告诉详细教程。不要发网址,要会的人。不会的的主要内容,如果未能解决你的问题,请参考以下文章

Win10搭建我的世界Minecraft服务器「内网穿透远程联机」

买过正版的minecraft JAVA版 兑换码已激活 登录到win10应用商店 安装不了

我的世界minecraft正版启动器无法启动

Minecraft开服Windows搭建我的世界MC服务器「公网远程联机」

minecraft我的世界找不到server.properties这个文件

我的世界minecraft /execult指令用法