Xubuntu 18.04でRabbitVCSを使ってみたい

はじめに

RabbitVCSを使ってみたくて色々試行錯誤しました。
Xubuntu 18.04で使う方法と、やってみてうまくいかなかったことをメモします。

環境

Xubuntu 18.04で使うにはNautilus + rabbitvcs-nautilusが良い

見出しのの通り。
Xubuntu のデフォルトのファイラはThunarなので、Thunar + rabbitvcs-thunar にしたかったのですが、うまくいかず。

やってみてうまくいかなかったこと

Xubuntu 18.04のデフォルトのリポジトリからインストールする試み

rabbitvcs-thunar がそもそもリポジトリに存在しないです。

$ apt-cache search rabbitvcs
rabbitvcs-cli - Command line interface for RabbitVCS
rabbitvcs-core - Easy version control
rabbitvcs-gedit - Gedit extension for RabbitVCS
rabbitvcs-nautilus - Nautilus extension for RabbitVCS

PPAを追加する試み

Index of /rabbitvcs/ppa/ubuntu/distsを参照したのですが、bionic(Ubuntu 18.04のコードネーム)が存在しないため、追加できず。

ソースからインストールする試み

rabbitvcs/README.md at v0.17.1 · rabbitvcs/rabbitvcs · GitHubの「For Debian-based distros you can run」を見ながらインストールに必要なパッケージを入れようとするも、DebianUbuntuのパッケージ名の違いによって断念。

さいごに

ファイラがThunarとNautilusの二つになってしまったのがイマイチですが、よしとしておきます。

maven-pluginのひな型を生成してみる

はじめに

maven-pluginのひな型を生成したことがなかったので、やってみました。

環境

どのアーキタイプを使うか?

mvn archetype:generateで得られる一覧をみると何個かアーキタイプの選択肢があるようです。
archetypeGroupIdがorg.apache.maven.archetypesのものから1個選んで生成してみることにします。

生成してみる

$ mvn org.apache.maven.plugins:maven-archetype-plugin:3.0.1:generate -DinteractiveMode=false -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-plugin -DarchetypeVersion=1.4 -DgroupId=com.example -DartifactId=my-plu gin -Dversion=0.1.0 -Dpackage=com.example
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< org.apache.maven:standalone-pom >-------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] Archetype repository not defined. Using the one from [org.apache.maven.archetypes:maven-archetype-plugin:1.4] found in catalog remote
(中略)
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-plugin:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: my-plugin
[INFO] Parameter: version, Value: 0.1.0
[INFO] Parameter: package, Value: com.example
[INFO] Parameter: packageInPathFormat, Value: com/example
[INFO] Parameter: package, Value: com.example
[INFO] Parameter: version, Value: 0.1.0
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: my-plugin
[INFO] Project created from Archetype in dir: C:\Users\xxxx\git\github\yyyy\my-plugin
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17.511 s
[INFO] Finished at: 2019-05-06T21:09:03+09:00

生成されたMavenPluginが想定している環境とか

生成されたPom.xmlのpropertiesの部分を引用します。

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    <maven.version>3.3.9</maven.version>
  </properties>

さいごに

archetypeVersion=1.4(2019年4月現在の最新)だと、Javaソースコードのバージョン1.7を想定しているんですね。
1.8が指定されるのかと漠然と想像していました。

mvn archetype:generateで生成できるプロジェクト一覧(Apache Maven 3.5.4の場合)

はじめに

mvn archetype:generateで生成できるプロジェクト一覧が載っているWebサイトを探したのですが、見つけられませんでした。
不便なので私のためにメモします。

環境

続きを読む

Java command line parserのpicocliが素敵

はじめに

コマンドラインパーサのpicocliを「良いね!」と思ったので、将来の自分のためにメモします。

picocliの公開サイト

github.com

良いと思ったところ

GoogleのGuavaと要求されるJDKのバージョン

はじめに

googleのGuavaを雑に日本語で検索しても、要求されるJDKのバージョンがわからなかったのでメモ。

要求されるJDKのバージョン

以下のページの下部に載っております。
github.com

2019年4月現在の記載内容を表にすると、以下の通りです。

Guavaのリリース JDK
Releases 1.0 ~ 11.0 JDK 1.5 or newer
Releases 12.0 ~ 20.0 JDK 1.6 or newer
Releases 21.0 JDK 1.8 or newer

Quarkus のクィック・スタートでmvn dependency:treeをやってみた

はじめに

本エントリの内容は件名通りです。

プロジェクト生成のコマンド

以下のコマンドを使用しました。Quarkus: コンテナ上で Java アプリを高速起動する新しい手法のご紹介 | 寺田 佳央 - Yoshio Teradaに記載されているママですね。

$ mvn io.quarkus:quarkus-maven-plugin:0.11.0:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.quickstart.GreetingResource" \
    -Dpath="/hello"

pom.xmlの内容

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.acme</groupId>
  <artifactId>getting-started</artifactId>
  <version>1.0-SNAPSHOT</version>
  <properties>
    <surefire-plugin.version>2.22.0</surefire-plugin.version>
    <quarkus.version>0.11.0</quarkus.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-bom</artifactId>
        <version>${quarkus.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-resteasy</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-arc</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-junit5</artifactId>
    </dependency>
    <dependency>
      <groupId>io.rest-assured</groupId>
      <artifactId>rest-assured</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-maven-plugin</artifactId>
        <version>${quarkus.version}</version>
        <executions>
          <execution>
            <goals>
              <goal>build</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${surefire-plugin.version}</version>
        <configuration>
          <systemProperties>
            <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
          </systemProperties>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <profiles>
    <profile>
      <id>native</id>
      <activation>
        <property>
          <name>native</name>
        </property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-maven-plugin</artifactId>
            <version>${quarkus.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>native-image</goal>
                </goals>
                <configuration>
                  <enableHttpUrlHandler>true</enableHttpUrlHandler>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${surefire-plugin.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <systemProperties>
                    <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
                  </systemProperties>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

mvn dependency:treeの結果

以下の通りです。

$ mvn dependency:tree
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building getting-started 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ getting-started ---
[INFO] org.acme:getting-started:jar:1.0-SNAPSHOT
[INFO] +- io.quarkus:quarkus-resteasy:jar:0.11.0:provided
[INFO] |  +- io.quarkus:quarkus-core:jar:0.11.0:provided
[INFO] |  |  +- commons-beanutils:commons-beanutils-core:jar:1.8.3:provided
[INFO] |  |  +- org.jboss.invocation:jboss-invocation:jar:1.5.1.Final:provided
[INFO] |  |  +- org.wildfly.common:wildfly-common:jar:1.5.0.Final-format-001:provided
[INFO] |  |  +- org.jboss.classfilewriter:jboss-classfilewriter:jar:1.2.4.Final:provided
[INFO] |  |  +- io.quarkus.gizmo:gizmo:jar:1.0.0.Alpha2:provided
[INFO] |  |  +- org.jboss:jandex:jar:2.1.1.Final:provided
[INFO] |  |  +- org.ow2.asm:asm:jar:6.2.1:provided
[INFO] |  |  +- io.quarkus:quarkus-core-runtime:jar:0.11.0:provided
[INFO] |  |  |  +- javax.inject:javax.inject:jar:1:provided
[INFO] |  |  |  +- io.smallrye:smallrye-config:jar:1.3.5:provided
[INFO] |  |  |  |  \- org.eclipse.microprofile.config:microprofile-config-api:jar:1.3:provided
[INFO] |  |  |  |     \- org.osgi:org.osgi.annotation.versioning:jar:1.0.0:provided
[INFO] |  |  |  +- org.jboss.logmanager:jboss-logmanager-embedded:jar:1.0.0:provided
[INFO] |  |  |  |  \- com.oracle.substratevm:svm:jar:1.0.0-rc12:provided
[INFO] |  |  |  +- org.jboss.logging:jboss-logging-annotations:jar:2.1.0.Final:provided
[INFO] |  |  |  +- org.jboss.threads:jboss-threads:jar:3.0.0.Alpha4:provided
[INFO] |  |  |  +- org.slf4j:slf4j-api:jar:1.7.25:provided
[INFO] |  |  |  +- org.jboss.slf4j:slf4j-jboss-logging:jar:1.1.0.Final:provided
[INFO] |  |  |  +- org.graalvm.sdk:graal-sdk:jar:1.0.0-rc12:provided
[INFO] |  |  |  +- org.wildfly.security:wildfly-elytron-ssl:jar:2.0.0.Alpha1:provided
[INFO] |  |  |  |  +- org.wildfly.security:wildfly-elytron-auth-server:jar:2.0.0.Alpha1:provided
[INFO] |  |  |  |  |  \- org.wildfly.security:wildfly-elytron-permission:jar:2.0.0.Alpha1:provided
[INFO] |  |  |  |  +- org.wildfly.security:wildfly-elytron-base:jar:2.0.0.Alpha1:provided
[INFO] |  |  |  |  +- org.wildfly.security:wildfly-elytron-credential:jar:2.0.0.Alpha1:provided
[INFO] |  |  |  |  +- org.wildfly.security:wildfly-elytron-auth:jar:2.0.0.Alpha1:provided
[INFO] |  |  |  |  +- org.wildfly.security:wildfly-elytron-util:jar:2.0.0.Alpha1:provided
[INFO] |  |  |  |  \- org.wildfly.security:wildfly-elytron-x500:jar:2.0.0.Alpha1:provided
[INFO] |  |  |  \- org.wildfly.security:wildfly-elytron-x500-cert:jar:2.0.0.Alpha1:provided
[INFO] |  |  |     +- org.wildfly.security:wildfly-elytron-asn1:jar:2.0.0.Alpha1:provided
[INFO] |  |  |     \- org.wildfly.security:wildfly-elytron-x500-cert-util:jar:2.0.0.Alpha1:provided
[INFO] |  |  \- io.quarkus:quarkus-builder:jar:0.11.0:provided
[INFO] |  +- io.quarkus:quarkus-resteasy-common:jar:0.11.0:provided
[INFO] |  |  \- io.quarkus:quarkus-resteasy-common-runtime:jar:0.11.0:provided
[INFO] |  |     \- org.jboss.resteasy:resteasy-core:jar:4.0.0.Beta8:provided
[INFO] |  |        +- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec:jar:1.0.2.Final:provided
[INFO] |  |        +- org.jboss.spec.javax.xml.bind:jboss-jaxb-api_2.3_spec:jar:1.0.1.Final:provided
[INFO] |  |        +- org.jboss.resteasy:resteasy-core-spi:jar:4.0.0.Beta8:provided
[INFO] |  |        +- org.reactivestreams:reactive-streams:jar:1.0.2:provided
[INFO] |  |        +- commons-io:commons-io:jar:2.5:provided
[INFO] |  |        \- net.jcip:jcip-annotations:jar:1.0:provided
[INFO] |  +- io.quarkus:quarkus-undertow:jar:0.11.0:provided
[INFO] |  |  +- io.undertow:undertow-servlet:jar:2.0.17.Final:provided
[INFO] |  |  |  +- io.undertow:undertow-core:jar:2.0.17.Final:provided
[INFO] |  |  |  \- org.jboss.spec.javax.servlet:jboss-servlet-api_4.0_spec:jar:1.0.0.Final:provided
[INFO] |  |  +- io.quarkus:quarkus-undertow-runtime:jar:0.11.0:provided
[INFO] |  |  |  +- org.jboss.xnio:xnio-nio:jar:3.6.5.Final:provided
[INFO] |  |  |  \- org.jboss.xnio:xnio-api:jar:3.6.5.Final:provided
[INFO] |  |  \- org.jboss.metadata:jboss-metadata-web:jar:11.0.0.Final:provided
[INFO] |  |     \- org.jboss.metadata:jboss-metadata-common:jar:11.0.0.Final:provided
[INFO] |  +- io.quarkus:quarkus-jaxb:jar:0.11.0:provided
[INFO] |  |  \- io.quarkus:quarkus-jaxb-runtime:jar:0.11.0:provided
[INFO] |  \- io.quarkus:quarkus-resteasy-runtime:jar:0.11.0:provided
[INFO] |     +- javax.validation:validation-api:jar:2.0.1.Final:provided
[INFO] |     \- com.sun.activation:jakarta.activation:jar:1.2.1:provided
[INFO] +- io.quarkus:quarkus-arc:jar:0.11.0:provided
[INFO] |  +- io.quarkus:quarkus-arc-runtime:jar:0.11.0:provided
[INFO] |  |  \- io.quarkus.arc:arc-runtime:jar:0.11.0:provided
[INFO] |  \- io.quarkus.arc:arc-processor:jar:0.11.0:provided
[INFO] |     +- javax.enterprise:cdi-api:jar:2.0.SP1:provided
[INFO] |     |  +- javax.el:javax.el-api:jar:3.0.0:provided
[INFO] |     |  \- javax.interceptor:javax.interceptor-api:jar:1.2:provided
[INFO] |     +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:provided
[INFO] |     \- javax.annotation:javax.annotation-api:jar:1.3.2:provided
[INFO] +- io.quarkus:quarkus-junit5:jar:0.11.0:test
[INFO] |  +- io.quarkus:quarkus-test-common:jar:0.11.0:test
[INFO] |  |  \- org.glassfish:javax.json:jar:1.1.4:test
[INFO] |  +- org.junit.jupiter:junit-jupiter-api:jar:5.3.2:test
[INFO] |  |  +- org.apiguardian:apiguardian-api:jar:1.0.0:test
[INFO] |  |  +- org.opentest4j:opentest4j:jar:1.1.1:test
[INFO] |  |  \- org.junit.platform:junit-platform-commons:jar:1.3.2:test
[INFO] |  +- org.junit.jupiter:junit-jupiter-params:jar:5.3.2:test
[INFO] |  \- org.junit.jupiter:junit-jupiter-engine:jar:5.3.2:test
[INFO] |     \- org.junit.platform:junit-platform-engine:jar:1.3.2:test
[INFO] \- io.rest-assured:rest-assured:jar:3.3.0:test
[INFO]    +- org.codehaus.groovy:groovy:jar:2.4.15:test
[INFO]    +- org.codehaus.groovy:groovy-xml:jar:2.4.15:test
[INFO]    +- org.apache.httpcomponents:httpclient:jar:4.5.6:provided
[INFO]    |  +- org.apache.httpcomponents:httpcore:jar:4.4.10:provided
[INFO]    |  +- commons-logging:commons-logging:jar:1.2:provided
[INFO]    |  \- commons-codec:commons-codec:jar:1.10:provided
[INFO]    +- org.apache.httpcomponents:httpmime:jar:4.5.3:test
[INFO]    +- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO]    +- org.hamcrest:hamcrest-library:jar:1.3:test
[INFO]    +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:test
[INFO]    +- io.rest-assured:json-path:jar:3.3.0:test
[INFO]    |  +- org.codehaus.groovy:groovy-json:jar:2.4.15:test
[INFO]    |  \- io.rest-assured:rest-assured-common:jar:3.3.0:test
[INFO]    \- io.rest-assured:xml-path:jar:3.3.0:test
[INFO]       +- org.apache.commons:commons-lang3:jar:3.4:test
[INFO]       +- javax.xml.bind:jaxb-api:jar:2.3.1:provided
[INFO]       +- com.sun.xml.bind:jaxb-osgi:jar:2.2.10:test
[INFO]       \- org.apache.sling:org.apache.sling.javax.activation:jar:0.1.0:test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.979 s
[INFO] Finished at: 2019-03-13T21:19:58+09:00
[INFO] Final Memory: 26M/260M
[INFO] ------------------------------------------------------------------------

さいごに

特にオチはないです。

読書メモ:Effective Java 第3版に第2版から追加された項目

はじめに

Effective Java 第3版に「付録 第2版に対応する項目」という章が存在します。
「この付録を使ったら、第3版で追加された項目が洗い出せるのでは?」と思いついたら洗い出してみたくなったので、洗い出しました。

第3版に第2版から追加された項目

以下が追加された項目のリストです。

  • 第2章 オブジェクトの生成と消滅
    • 項目 5 資源を直接結び付けるよりも依存性注入を選ぶ
    • 項目 9 try-finallyよりも try-with-resourcesを選ぶ
  • 第4章 クラスとインタフェース
    • 項目 22 肩を定義するためだけにインタフェースを選ぶ
    • 項目 25 ソースファイルを単一のトップレベルのクラスに限定する
  • 第5章 ジェネリック
  • 第7章 ラムダとストリーム
    • 項目 43 ラムダよりもメソッド参照を選ぶ
    • 項目 44 標準の関数型インタフェースを使う
    • 項目 45 ストリームを注意して使う
    • 項目 46 ストリームで副作用のない関数を選ぶ
    • 項目 47 戻り値としてStream よりも Collection を選ぶ
    • 項目 48 ストリームを並列化するときは注意を払う
  • 第8章 メソッド
    • 項目 55 オプショナルを注意して返す
  • 第11章 並行性
    • 項目 78 共有された可変データへのアクセスを同期する