WebJar是一个包含HTML/CSS/JavaScript资源的JAR文件。然后由基于Java的Web服务器提供这些资源。这篇博客文章显示了如何将WebJars从头开始创建,使用Gradle作为构建系统,而GitHub Packages作为存储库。
目录
- Introduction
- Example WebJar project
- Create GitHub repository
- Publish to GitHub Packages
- Example App project
介绍
概述
“ example-webjar”项目托管一个名为“ engring.html”的HTML文件,其中包含文本“ Hello,World!”。该文件包装在WebJar中,然后发布到GitHub软件包(1)。 “ example-app”项目从那里下载WebJar(2),并在启动时为“ engring.html”服务(3)。
依赖项
要与下面描述的步骤一起,需要在计算机上安装以下工具:
此外,有必要拥有一个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所述。
然后将上面创建的代码添加到该存储库:
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所述。
片刻后,工作流将开始运行,可以在“动作”选项卡中观察。
示例应用程序项目
现在可以使用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所述。
此访问令牌应在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文件: