Hatena::Groupprogram

ひとり開発日記。 このページをアンテナに追加 RSSフィード

2017/06/02 (Fri)

Windowsのcmd.exeで、Mavenを使って新規プロジェクトを作る時

| Windowsのcmd.exeで、Mavenを使って新規プロジェクトを作る時 - ひとり開発日記。 を含むブックマーク はてなブックマーク - Windowsのcmd.exeで、Mavenを使って新規プロジェクトを作る時 - ひとり開発日記。

mvn archetype:generate ^
  -DarchetypeArtifactId=maven-archetype-quickstart ^
  -DinteractiveMode=false ^
  -DgroupId=net.halflite ^
  -DartifactId=testapp ^
  -Dpackage=net.halflite.testapp

毎度忘れてググってしまうので…。*1 *2

*1:cmdのバッチファイルで、1コマンドを複数行にわたって記述したい場合 http://qiita.com/ndxbn/items/089b97e33ae9b69bf48b

*2:groupId/artifactId/package は適時書き換えて下さいな

トラックバック - http://program.g.hatena.ne.jp/halflite/20170602

2015/10/01 (Thu)

EclipseLink/JPAのエンティティクラスから作成したDDLを、flywayでマイグレーション

| EclipseLink/JPAのエンティティクラスから作成したDDLを、flywayでマイグレーション - ひとり開発日記。 を含むブックマーク はてなブックマーク - EclipseLink/JPAのエンティティクラスから作成したDDLを、flywayでマイグレーション - ひとり開発日記。

EclipseLink/JPAのエンティティクラスから、CREATE TABLEのDDLを、Mavenで作成 - ひとり開発日記。 - プログラマの秘密のあれこれ の続きです。

DBマイグレーションツールflywayは、Mavenプラグイン形式でも提供されているので、別個インストールしなくても、pom.xmlに記述するだけで実行OKなんですね。

そして、結構面倒くさいConfiguration設定も、必要なだけ properties の中で flyway.*** 形式で記述するだけで良いのです。

    <properties>
        <flyway.url>jdbc:mysql://127.0.0.1:3306/testdb</flyway.url>
        <flyway.user>testuser</flyway.user>
        <flyway.password>testpassword</flyway.password>
        <flyway.locations>filesystem:${project.basedir}/db/migration</flyway.locations>
    </properties>

    <build>
        <plugins>
             <plugin>
                <groupId>org.flywaydb</groupId>
                <artifactId>flyway-maven-plugin</artifactId>
                <version>3.2.1</version>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.36</version>
                    </dependency>
                </dependencies>
            </plugin>
       </plugins>
    </puild>

JDBCURL、ユーザー、パスワードDBのドライバーは、それぞれ自分の環境に合わせて頂いて…。

mvn flyway:migrate

上記を実行すると、DDLDBに流し込まれて、各種テーブルが出来上がります。

トラックバック - http://program.g.hatena.ne.jp/halflite/20151001

2015/09/23 (Wed)

EclipseLink/JPAのエンティティクラスから、CREATE TABLEのDDLを、Mavenで作成

| EclipseLink/JPAのエンティティクラスから、CREATE TABLEのDDLを、Mavenで作成 - ひとり開発日記。 を含むブックマーク はてなブックマーク - EclipseLink/JPAのエンティティクラスから、CREATE TABLEのDDLを、Mavenで作成 - ひとり開発日記。

  1. JPA2.1形式のエンティティクラスを作成
  2. そのエンティティクラスから、CREATE TABLE文のDDLを自動作成
  3. DDLDBに流して、テーブル作成

上記のようなこと、早い話Seasar2でのS2JDBC-Genのようなことを、JPA2.1環境でやりたかったのですが、なかなか大変でした…。*1

結局、eclipselink-ddlgeneration-maven-pluginを使って、DDLを作成するのが簡単、と言うことに。

  • src/main/resources/META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
	version="2.1">
	<persistence-unit name="testdb" transaction-type="RESOURCE_LOCAL">
		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
		<exclude-unlisted-classes>false</exclude-unlisted-classes>

		<properties>
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/testdb" />
			<property name="javax.persistence.jdbc.user" value="testuser" />
			<property name="javax.persistence.jdbc.password" value="testpassword" />

			<!-- Logging -->
			<property name="eclipselink.logging.level" value="INFO" />
			<property name="eclipselink.logging.timestamp" value="true" />
			<property name="eclipselink.logging.session" value="true" />
			<property name="eclipselink.logging.thread" value="true" />
			
			<!-- add semicolon -->
			<property name="eclipselink.ddlgen-terminate-statements" value="true" />
		</properties>
	</persistence-unit>
</persistence>

eclipselink.ddlgen-terminate-statements プロパティに true を設定しておくと、CREATE文の末尾に、セミコロンが付加され、一気にDDLが流せるようになるのです。*2

	<build>
		<plugins>
			...
			<plugin>
				<groupId>us.hornerscorners.mojo</groupId>
				<artifactId>eclipselink-ddlgeneration-maven-plugin</artifactId>
				<version>1.8</version>
				<configuration>
					<jdbcDriver>com.mysql.jdbc.Driver</jdbcDriver>
					<jdbcUrl>jdbc:mysql://127.0.0.1:3306/testdb</jdbcUrl>
					<jdbcUser>testuser</jdbcUser>
					<jdbcPassword>testpassword</jdbcPassword>
					<outputDir>db/migration</outputDir>
					<createFilename>V2__schema.sql</createFilename>
					<deleteFilename>drop-schema.sql</deleteFilename>
					<unitName>testdb</unitName>
				</configuration>
				<executions>
					<execution>
						<id>ddl-generation</id>
						<goals>
							<goal>execute</goal>
						</goals>
						<phase>process-classes</phase>
					</execution>
				</executions>
				<dependencies>
					<dependency>
						<groupId>mysql</groupId>
						<artifactId>mysql-connector-java</artifactId>
						<version>5.1.36</version>
					</dependency>
					<dependency>
						<groupId>org.eclipse.persistence</groupId>
						<artifactId>org.eclipse.persistence.jpa</artifactId>
						<version>2.6.0</version>
					</dependency>
				</dependencies>
			</plugin>
		</plugins>
	</build>

pom.xml に eclipselink-ddlgeneration-maven-plugin の設定を書きます。 ここで注意して欲しいのが、プラグイン内の依存関係に、EclipseLinkの2.6.0を指定しないと、CREATE文の末尾に、セミコロンが付加されないのです。 ソースコードコンパイルの依存関係と、プラグイン内の依存関係が別なので、注意が必要ですね。

後、DDLJAR/WARに含めたくないので、outputDirは、プロジェクト直下に db/migration というディレクトリを作って、そこに書き出すようにし、CREATE文のファイル名は、flywayで実行しやすいように、"V2__***.sql"としています。

mvn process-classes

pom.xml と同じディレクトリで、上記コマンド実行すると、DDLファイルが書き出されます。

*1:「金魚本」 asin:4798124605 にも載ってないですしね

*2:EclipseLinkのDDLにsemicolonを付与する | Monotalk http://www.monotalk.xyz/blog/eclipselink%E3%81%AEddl%E3%81%ABsemicolon%E3%82%92%E4%BB%98%E4%B8%8E%E3%81%99%E3%82%8B/

トラックバック - http://program.g.hatena.ne.jp/halflite/20150923

2015/05/03 (Sun)

続・Webjarsは便利ですね。

| 続・Webjarsは便利ですね。 - ひとり開発日記。 を含むブックマーク はてなブックマーク - 続・Webjarsは便利ですね。 - ひとり開発日記。

当たり前ですが、クラスパスにJARとして入るだけなので、Servletベースだと、自前でInputStream / OutputStream / HttpServletRequest / HttpServletResponse廻りの云々を書かないとダメですよ。

Webjarsは便利ですね。 - ひとり開発日記。 - プログラマの秘密のあれこれ

以前、上記のように書いたんですけど、Servlet 3以降*1では、普通にMavenでパスを通せば良いんですね…。

JAX-RSで、WebjarsのCSS/JS/Webfontを書き出すようなクラス書いていたのですが、もっと早く気付けばよかった…。

*1:Tomcatだと、ver. 7.x 以降

トラックバック - http://program.g.hatena.ne.jp/halflite/20150503

2015/04/24 (Fri)

RESTEasy + Guice のプロジェクトをmavenで作る

| RESTEasy + Guice のプロジェクトをmavenで作る - ひとり開発日記。 を含むブックマーク はてなブックマーク - RESTEasy + Guice のプロジェクトをmavenで作る - ひとり開発日記。

Maven Central Repositoryには、既に、RESTEasy + Google Guice 用のarchetypeが用意されているんですね。

試した環境は以下。

mvn archetype:generate -Dfilter=resteasy

対話型のプロジェクト作成モードに入ります。

c:\workspace>mvn --v
Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e; 2014-06-17T22:51:42+09:00)
Maven home: C:\Program Files\apache\apache-maven-3.2.2\bin\..
Java version: 1.8.0_05, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_05\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
c:\workspace>mvn archetype:generate -Dfilter=resteasy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> com.pampanet:shiro-guice-resteasy-webapp-archetype (Maven Archetype for building Secure RESTful Web Services Archetype with Apache Shiro 1.2.3, RestEasy 3 and Google Guice 3.0)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): :

Group ID/Artifact IDを指定して実行時は、以下のようになりますね。

mvn archetype:generate -DarchetypeGroupId=com.pampanet -DarchetypeArtifactId=shiro-guice-resteasy-webapp-archetype

書きだされたプロジェクト、なかなかモダンでいい感じです。

参考
トラックバック - http://program.g.hatena.ne.jp/halflite/20150424