GitHubActionのWindowsでMaven実行

ファイルロックされてファイルが消せないとか、Windowsで発生する問題を検知したいなと思い、GitHub ActionsでLinux&Windowsで実行したくなったので、調べたら、簡単にできた。

たとえば、.github/workflows/maven.ymlを

name: Java CI with Maven

on:
  push:
    branches:
    - main
  pull_request:
    branches:
    - main

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
    steps:
    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'temurin'
    - name: Build with Maven
      run: mvn -B package --file pom.xm

という感じで、作っておいておけば、良い感じだった。

javadoc: error – The code being documented uses modules

Java 11を使ってmvn javadoc:javadocとしたときに

[ERROR] Exit code: 1 - javadoc: error - The code being documented uses modules but the packages defined in https://docs.oracle.com/javase/8/docs/api/ are in the unnamed module.

とか

[ERROR] Exit code: 1 - javadoc: エラー - ドキュメント化しようとしているコードではモジュールが使用されていますが、https://docs.oracle.com/javase/8/docs/api/で定義されているパッケージは名前のないモジュールのものです。

のようなエラーが出るときには、JavaDocの参照するJavaのソースコードのバージョンの問題なので、pom.xmlのjavadocプラグインで、sourceを次のようにして押しておく

      <plugin>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.0.1</version>
        <configuration>
          <encoding>UTF-8</encoding>
          <docencoding>UTF-8</docencoding>
          <charset>UTF-8</charset>
          <source>8</source>
        </configuration>
      </plugin>

Fessの中のSolr

はじめに

これは Solr Advent Calendar 2014 – Qiita 、10日目の記事です。
Fessの中で使われているSolrについて、ご紹介します。
Tomcat上でウェブアプリとか作っておいて、そこにSolrを相乗りとかさせるときに参考になるかもしれません。

Fessの中のSolr

ざっくりではありますが、Solrを同梱しているFessの配布物についてまとめます。

  • FessはTomcatで配布している
  • solr.warをTomcatに配備している(Fessのfess.warと相乗り)
  • SolrにBASIC認証を設定している
  • Fess内ではSolrJでアクセスしている

今回は、FessでSolrJを使って、どのように呼び出しているかの細かい話は省略しますが、SolrLibというものを作って、SolrJをラップして利用しています。
続いて、実際の中身を見ていきたいと思います。

ダウンロード

まずは、Fessをダウンロードします。
現在、ここから fess-server-9.3.1.zipをダウンロードできます。
今回は、特に実行とかが目的ではないので、これ以外は特に必要はありません。

展開

fess-server-9.3.1.zipを展開します。

$ unzip fess-server-9.3.1.zip
$ cd cd fess-server-9.3.1

展開すると、Tomcatをご存じの方はすぐわかるかと思いますが、ほぼTomcatな感じです。
FessでSolrをTomcat上で動かすために変更している部分は以下になります。

  • solrディレクトリ
  • webapps/solrディレクトリ
  • bin/setenv.*ファイル
  • conf/tomcat-users.xmlファイル

Fessの配布物を生成するビルドスクリプトの中で、Tomcatをダウンロードして、Solrをダウンロードして、fess.warをビルドして、必要なファイルを置き換えてTomcatに固め直す、ということを行っています。
それを行っているのがfess-serverというプロジェクトになります。
ですので、そのプロジェクトのbuild.xmlを見ると、solr.warをTomcatにどのように配備しているのかが分かるかと思います。
簡単にですが、置き換えている概要的な説明をしておきます。

solrディレクトリ

Solrの配布物に含まれるexampleをベースにcollection1などを持ってきて、必要なファイルを置き換えています。
schema.xml、solrconfig.xml、solr.xml、core.propertiesはFess独自で用意しています。
あとは、Fessは通常の全文検索のインデックスをcore1として、サジェスト用インデックスにはcore1-suggestという感じで2つのコアを利用しています。

webapps/solrディレクトリ

Solrの配布物に含まれるsolr.warを展開して、webapps以下に置いています。
BASIC認証を適用しているので、web.xmlにその設定を加えています。

bin/setenv.*ファイル

Solr用にはsolr.solr.homeを設定しています。

conf/tomcat-users.xmlファイル

BASIC認証用のユーザーを追加しています。
以上のような形でSolrをFessに組み込んでいます。
という感じで、Solrの配布物を持ってきて、上記のファイルを持ってきて編集すれば、ご利用の環境にSolrを配備して利用することができるようになるかと思います。機会があれば、試してみるのも良いかと。

Maven Central Repositoryに配備する

オープンソースであれば、Maven Central RepositoryにSonatype OSS Maven Repository Usage Guideの手順で置くことができる。やることとして、SonatypeのJIRAにアカウントを作成してチケットを上げて、gpgのキーを作っておいて、pom.xmlを変更してリリースすれば良い。あとは、Sonatypeのリポジトリ管理ツールでCloseしてReleaseする感じ。まぁ、一回やってしまうとこういうことね、という感じなのだけど、初めはわかりにくいかも…。そんな感じで、CodeLibsに置いてあったElasticsearchプラグインなどをCentralに置きました。CodeLibsのリポジトリはここです。そういえば、あとはドメインは持っておいたほうが良いのかも。そのパッケージ名以下で置くことになると思うので…。