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>

Maven Central Repositoryに配備する

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

Archiva 1.4 M3のインストール

ArchivaはApacheから提供されているMavenなどのリポジトリ管理ツールである。Mavenなどをよく使うと成果物の置き場とかには悩むかと思うがそれを管理することができる。というわけで、説明はここにあるけど、1.4 M3を既存のTomcat 7などに入れる方法を書いておく。
まず、Archivaをここからダウンロードする。ダウンロードしたら

$ cd $TOMCAT_HOME
$ mkdir archiva
$ cp ~/Downloads/apache-archiva-js-1.4-M3.war archiva

という感じでディレクトリを作っておいておく。そんでさらに、derby-10.9.1.0.jar、activation-1.1.1.jar、mail-1.4.6-rc1.jarをMavenリポジトリなどから入手してlibに置く。

$ cp ~/Downloads/derby-10.9.1.0.jar ~/Downloads/activation-1.1.1.jar ~/Downloads/mail-1.4.6-rc1.jar lib

次にarchiva.xmlを生成する。

$ vi conf/Catalina/localhost/archiva.xml

内容は以下のような感じ。

<Context path="/archiva"
            docBase="${catalina.home}/archiva/apache-archiva-js-1.4-M3.war">
  <Resource name="jdbc/users" auth="Container" type="javax.sql.DataSource"
    username="sa" password="" driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
    url="jdbc:derby:${catalina.home}/archiva/database/users;create=true" />
  <Resource name="jdbc/archiva" auth="Container" type="javax.sql.DataSource"
    username="sa" password="" driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
    url="jdbc:derby:${catalina.home}/archiva/database/archiva;create=true" />
  <Resource name="mail/Session" auth="Container"
    type="javax.mail.Session" mail.smtp.host="localhost"/>
</Context>

そして、setenv.shに追記しておく。

$ vi bin/setenv.sh
export CATALINA_OPTS="$CATALINA_OPTS -Dappserver.home=$CATALINA_HOME -Dappserver.base=$CATALINA_HOME"

という感じであとはTomcatを起動すれば良い。

MavenでのServlet 3.0の依存関係

FessではTomcat 7の環境を利用しているのだけど、依存関係をいじったら

java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletOutputStream

という感じで怒られるようになった…。たぶん、今まで微妙な依存関係でうまくいっていたのかもしれないけど、その辺を変更してしまったため、この問題が起きるようになってしまったのだと思う。ここにも依存関係の話題があるのだけど、今まではServlet API 3.0用に以下の感じで依存関係を記述していた。

javax
javaee-web-api
6.0
provided

これだとうまく行かないようなので、

javax.servlet
javax.servlet-api
3.0.1
provided

と書くことで良いみたい。というわけで、しばらくこれで様子を見てみよう。