Xubuntu 18.04で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」を見ながらインストールに必要なパッケージを入れようとするも、DebianとUbuntuのパッケージ名の違いによって断念。
さいごに
ファイラが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>
Java command line parserのpicocliが素敵
はじめに
コマンドラインパーサのpicocliを「良いね!」と思ったので、将来の自分のためにメモします。
picocliの公開サイト
良いと思ったところ
- 要求がJava 5 or higher
- アノテーションを使用した表記がわかりやすい。詳細はQuick Guide - 2. How to Use itを参照
- オプション指定方法の種類が必要十分ある。詳細はQuick Guide - 3. Options and Parametersを参照。
- アプリケーションの利用者はオプションをファイルに記載することもできる。詳細はFeatures - 2.7. @-filesを参照。
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章 ジェネリックス
- 項目 32 ジェネリックスと可変長引数を注意して組み合わせる
- 第7章 ラムダとストリーム
- 項目 43 ラムダよりもメソッド参照を選ぶ
- 項目 44 標準の関数型インタフェースを使う
- 項目 45 ストリームを注意して使う
- 項目 46 ストリームで副作用のない関数を選ぶ
- 項目 47 戻り値としてStream よりも Collection を選ぶ
- 項目 48 ストリームを並列化するときは注意を払う
- 第8章 メソッド
- 項目 55 オプショナルを注意して返す
- 第11章 並行性
- 項目 78 共有された可変データへのアクセスを同期する