golang项目构建工具插件gobGradleMaven的使用

Golang 项目构建工具插件 gob/Gradle/Maven 的使用

介绍

虽然 Golang 编程生态系统越来越成熟,但这些工具和框架都是独立存在的,用于解决特定问题。每当开始一个新的 Golang 项目时,都需要进行一系列初始化;更糟糕的是,每当切换开发环境时,都必须重复相同的过程!

这个项目旨在通过提供一个名为 gbc 的工具来解决这个问题,该工具类似于 Java 生态系统中的 MavenGradle,同时提供了一个类似于 SpringBoot 的框架(粘合剂)。

特性

  1. 一切都是插件,您可以使用任何喜欢的工具作为插件来自定义构建过程!
  2. 模型驱动的 SQL 数据库 DAO(数据访问对象)。
  3. 通过 samber/do 支持 IoC 容器。
  4. 为大多数流行框架生成脚手架代码。
  5. 环境敏感的配置文件。application.yml 用于非测试环境,application-test.yml 用于测试环境。
  6. 友好的帮助消息。
  7. 更多…

一个基于 gob 的项目是什么样子的?

就像 SpringBoot 一样,gob 项目中最重要的部分是定义项目的 配置。主要有 两个 配置:

  1. gob.yaml:它的作用与 Gradle 中的 settings.gradle.ktsMaven 中的 pom.xml 相同,您可以在此文件中定义任何第三方工具作为插件。
  2. application.yaml:它的作用与 SpringBoot 中的 application.yaml 相同。

快速开始

  1. 使用以下命令安装 gbc
go install github.com/kcmvp/gob/cmd/gbc@latest
  1. 在项目主目录中运行以下命令初始化项目:
gbc init

gbc 如何工作

gbcgob.yaml 中定义的所有内容视为插件。您只需要告诉 gbc 3W(where、when 和 what):

  1. Where:从哪里下载工具
  2. When:何时执行命令
  3. What:用工具做什么

命令

构建命令

  • gbc init
  • gbc build
  • gbc clean
  • gbc test
  • gbc lint
  • gbc deps

插件命令

  • gbc plugin install
  • gbc plugin list

设置命令

  • gbc setup version

示例代码

gob.yaml 示例

exec:
    commit-msg-hook: ^#[0-9]+:\s*.{10,}$
    pre-commit-hook:
        - lint
        - test
    pre-push-hook:
        - test
plugins:
    golangci-lint:
        alias: lint #When : when issue `gbc lint`
        args: run ./... #What: execute `golangci-lint run ./...`
        url: github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2 #Where: where to download the plugin
    gotestsum:
        alias: test
        args: --format testname -- -coverprofile=target/cover.out ./...
        url: gotest.tools/gotestsum@v1.11.0

version.go 示例

// buildVersion don't change this
var buildVersion string

常见问题

安装插件时,如何找到 URL?

gob plugin install 的工作方式与 go install 相同,它接受与 go install 相同的 URL。

如何升级插件?

只需简单地编辑 gob.yaml 文件并更新您想要的版本。

plugins:
  golangci-lint:
  alias: lint
  args: run ./...
  url: github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2

更多关于golang项目构建工具插件gobGradleMaven的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang项目构建工具插件gobGradleMaven的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Go语言项目构建工具插件比较:go build、Gradle与Maven

在Go语言项目开发中,构建工具的选择对项目管理和构建效率有重要影响。下面我将对比三种常见的构建方式:go build(原生工具)、Gradle和Maven插件。

1. Go原生构建工具:go build

Go语言自带的构建工具go build是最简单直接的方式。

// 示例项目结构
// myproject/
//   ├── main.go
//   ├── go.mod
//   └── pkg/
//       └── utils.go

// main.go
package main

import (
	"fmt"
	"myproject/pkg"
)

func main() {
	fmt.Println(pkg.Hello())
}

// pkg/utils.go
package pkg

func Hello() string {
	return "Hello, Go!"
}

构建命令:

# 普通构建
go build -o myapp

# 跨平台构建
GOOS=linux GOARCH=amd64 go build -o myapp-linux

# 安装依赖
go mod download

# 运行测试
go test ./...

优点:

  • 简单直接,无需额外配置
  • 与Go工具链深度集成
  • 支持模块化依赖管理

2. Gradle插件:gogradle

Gogradle是Gradle的插件,为Go项目提供Gradle构建能力。

// build.gradle 配置示例
plugins {
    id 'com.github.blindpirate.gogradle' version '0.11.4'
}

golang {
    goVersion = '1.20'
}

dependencies {
    golang {
        build 'github.com/gin-gonic/gin@v1.8.1'
        test 'github.com/stretchr/testify@v1.7.0'
    }
}

build {
    targetPlatform = ['linux-amd64', 'windows-amd64']
    outputLocation = './build/${GOOS}_${GOARCH}/${PROJECT_NAME}'
}

构建命令:

# 初始化项目
gradle init go

# 构建项目
gradle build

# 清理构建
gradle clean

优点:

  • 利用Gradle的强大构建能力
  • 支持多项目构建
  • 依赖管理更灵活

3. Maven插件:golang-maven-plugin

Maven也可以通过插件支持Go项目构建。

<!-- pom.xml 配置示例 -->
<project>
    <build>
        <plugins>
            <plugin>
                <groupId>com.igormaznitsa</groupId>
                <artifactId>golang-maven-plugin</artifactId>
                <version>2.3.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <goVersion>1.20</goVersion>
                    <buildFlags>
                        <flag>-o</flag>
                        <flag>target/myapp</flag>
                    </buildFlags>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

构建命令:

# 构建项目
mvn package

# 清理构建
mvn clean

优点:

  • 适合已有Maven生态的项目
  • 与其他JVM语言项目集成方便
  • 利用Maven的生命周期管理

对比总结

特性 go build Gogradle Maven插件
学习曲线
跨平台构建支持
依赖管理 go mod 支持多方式 支持多方式
多项目支持 有限 强大 强大
构建缓存
适合场景 纯Go简单项目 复杂构建需求 Java/Go混合项目

推荐选择

  1. 纯Go项目:优先使用原生go build,简单高效
  2. 复杂构建需求:考虑Gogradle,特别是需要多项目构建或复杂构建流程时
  3. 混合技术栈:如果项目中有Java/Go混合,Maven插件可能是更好选择

对于大多数Go项目,原生构建工具已经足够强大。只有在需要与Java生态集成或需要复杂构建流程时,才需要考虑Gradle或Maven插件。

回到顶部