使用Gradle和GitHub软件包创建WebJar
#github #java #gradle

WebJar是一个包含HTML/CSS/JavaScript资源的JAR文件。然后由基于Java的Web服务器提供这些资源。这篇博客文章显示了如何将WebJars从头开始创建,使用Gradle作为构建系统,而GitHub Packages作为存储库。

目录

介绍

概述

“ example-webjar”项目托管一个名为“ engring.html”的HTML文件,其中包含文本“ Hello,World!”。该文件包装在WebJar中,然后发布到GitHub软件包(1)。 “ example-app”项目从那里下载WebJar(2),并在启动时为“ engring.html”服务(3)。

Concept

依赖项

要与下面描述的步骤一起,需要在计算机上安装以下工具:

此外,有必要拥有一个GitHub account

示例WebJar项目

首先,为WebJar项目创建一个新目录。在此目录中创建一个名为settings.gradle的文件,该文件指定项目名称:

rootProject.name = 'example-webjar'

然后创建一个名为build.gradle的文件,并用webjar标识符声明:

apply plugin: 'java'
apply plugin: 'maven-publish'

publishing {
  publications {
    mavenJava(MavenPublication) {
      groupId = 'com.github.experimental-software'
      artifactId = 'example-webjar'
      version = '0.0.1'

      from components.java
    }
  }
}

现在创建子目录src/main/resources/META-INF/resources。在此目录中,创建一个名为greeting.html
的HTML文件

<html>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

创建GitHub存储库

接下来,为示例WebJar创建一个新的GitHub存储库,如docs.github.com所述。

New repository config

然后将上面创建的代码添加到该存储库:

git init
git add .
git commit -m "Initial commit"
git remote add origin git@github.com:experimental-software/example-webjar.git
git push

发布到GitHub包装

必须在上面创建的build.gradle文件中注册发行版的存储库:

publishing {
  // publications { ...

  repositories {
    maven {
      name = "GitHubPackages"
      url = "https://maven.pkg.github.com/experimental-software/example-webjar"
      credentials {
        username = System.getenv("GITHUB_ACTOR")
        password = System.getenv("GITHUB_TOKEN")
      }
    }
  }
}

GitHub Actions的帮助下,当某些事件发生在存储库中时,可以自动执行某些脚本。如果添加以下文件,GitHub将在创建版本后自动构建并发布新软件包:

.github/workflows/release.yml

name: Publish WebJar to GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-java@v1
        with:
          distribution: "temurin"
          java-version: 17
      - uses: gradle/gradle-build-action@v2
        with:
          gradle-version: current
      - run: gradle publish
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

这些更改需要投入并将其推入存储库。

git add .
git commit -m "Add publish workflow"
git push

要触发工作流程,请在github用户界面中创建一个版本,如docs.github.com所述。

Create release

片刻后,工作流将开始运行,可以在“动作”选项卡中观察。

Workflow run

示例应用程序项目

现在可以使用WebJar。要尝试一下,请为新的Java项目创建一个新的目录“示例应用程序”。

在此目录中,创建一个声明项目名称的settings.gradle文件:

rootProject.name = 'example-app'

然后创建一个名为build.gradle的文件,该文件在Maven Central存储库中声明对Spring Boot的依赖性和GitHub软件包中的示例WebJar:

plugins {
  id 'org.springframework.boot' version '2.7.5'
  id 'io.spring.dependency-management' version '1.0.15.RELEASE'
  id 'java'
}

repositories {
  mavenCentral()

  maven {
    url = uri('https://maven.pkg.github.com/experimental-software/example-webjar')
    credentials {
      username = project.findProperty('gpr.user')
      password = project.findProperty('gpr.key')
    }
  }
}

dependencies {
  implementation 'com.github.experimental-software:example-webjar:0.0.1'
  implementation 'org.springframework.boot:spring-boot-starter-web'
}

然后在目录src/main/java/com/example/demo中创建一个名为DemoApplication.java的文件,该文件包含应用程序的“主要”方法:

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

在启动应用程序之前,有必要使用“读:packages”范围创建一个访问令牌,如docs.github.com所述。

Create access token

此访问令牌应在global Gradle properties中注册,例如:

~/.gradle/gradle.properties

gpr.user=jdoe
gpr.key=ghp_**********************************

最终,通过调用bootRun gradle任务启动应用程序:

$ gradle bootRun

> Task :bootRun

...

2022-10-30 20:35:56.825  INFO 2386 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''

在Web浏览器中打开URL http://localhost:8080/greeting.html时,应显示上面创建的HTML文件:

Hello