ソースのバージョン - TzlTTqTjの日記を参考にさせていただきました!ビルドの設定を下記のように書き替えればよい
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build>
さらにtargetタグにつづけて
<encoding>Windows-31J</encoding>
とか指定すれば、文字エンコーディングによるコンパイルエラーなども回避できるぽい。
フェーズとは mvn complieとかmvn installとか、プロジェクトをビルドするための一つの集まりのこと。フェーズを指定するとそれに関連付いたゴールが一つ以上実行される。関連づけは、そのプロジェクトのアーティファクトのタイプやpom.xmlの情報から、Mavenが勝手に判断するらしい。
またフェーズには validate -> compile -> test -> deployなどと実行順序などが定義されている。これをビルドライフサイクルという。
デフォルトのライフサイクルは
${MAVEN_HOME}/lib/maven-core-2.0.7-uber.jar#META-INF/plexus/components.xml
に定義されている。components.xml
~/.m2/settings.xml
に以下の記述を書いておきます。
<settings> <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>hogehoge.jp</host> <port>81</port> <username>fuga</username> <password>fuga</password> <nonProxyHosts>www.google.com|*.hoge.jp</nonProxyHosts> </proxy> </proxies> </settings>
mvn archetype:create -DgroupId=nu.mine.kino.mavensample -DartifactId=kino-app
グループIDとプラグインIDを指定するんですね。
mvn eclipse:eclipse
これでEclipse関連のファイルができあがります。以後、Eclipse上で管理できるわけですね。
出力されるファイル内で
M2_REPO
という変数を使用しているので、Eclipseの変数としてM2_REPOを定義しておきます。値はローカルリポジトリへのパスを指定しておきます。
通常pom.xmlはデフォルト値は省略されますが、それを省略しないで出力します。
mvn projecthelp:effective-pom
コンソールに
<?xml version="1.0"?><project> <modelVersion>4.0.0</modelVersion> <groupId>nu.mine.kino.mavensample</groupId> <artifactId>kino-app</artifactId> <name>kino-app</name> <version>1.0-SNAPSHOT</version> <url>http://maven.apache.org</url> <build> <sourceDirectory>t:\workspace3.2\kino-app\src\main\java</sourceDirectory> <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory> <testSourceDirectory>t:\workspace3.2\kino-app\src\test\java</testSourceDirectory> <outputDirectory>t:\workspace3.2\kino-app\target\classes</outputDirectory> <testOutputDirectory>t:\workspace3.2\kino-app\target\test-classes</testOutputDirectory> <resources> <resource> <directory>t:\workspace3.2\kino-app\src\main\resources</directory> </resource> </resources> <testResources> <testResource> <directory>t:\workspace3.2\kino-app\src\test\resources</directory> </testResource> </testResources> <directory>t:\workspace3.2\kino-app\target</directory> <finalName>kino-app-1.0-SNAPSHOT</finalName> <plugins> <plugin> <artifactId>maven-projecthelp-plugin</artifactId> <version>2.0-beta-1</version> </plugin> </plugins> </build> <repositories> <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Maven Repository Switchboard</name> <url>http://repo1.maven.org/maven2</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> <id>central</id> <name>Maven Plugin Repository</name> <url>http://repo1.maven.org/maven2</url> </pluginRepository> </pluginRepositories> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <reporting> <outputDirectory>target/site</outputDirectory> </reporting> </project>
が出力されました。ファイルにリダイレクトして、ちょこちょこ編集して使うことができて便利です。デフォルト値がでてるのがよいですね。
mvn help:effective-settings -Doutput=effective-settings.xml
でデフォルトのsettings.xmlが出力される
デフォルトは
~/.m2/repository
のヤツ。Mavenのインストールディレクトリ配下などにある、settings.xmlで変更可能です。
<?xml version="1.0"?><settings> <localRepository>~/.m2/repositoryNew</localRepository> <-こんな感じ。 <servers>... </servers> </settings>
http://slashdot.jp/~pluto/journal/328571
Mavenは必要なライブラリがローカルにあるかを探し、なかったらネット上のリポジトリを探しに行きます。で必要なライブラリですが、pom.xmlで以下のように指定します。
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> dependencies内に複数かける </dependencies>
<groupId /> <artifactId /> <version />
は必須みたいですね。
mvn package
でjarが作成されます。
mvn install
で該当プロジェクトがローカルリポジトリ(~/.m2のことです)にインストールされます。複数のプロジェクトが依存しあってる構成で開発するときはローカルリポジトリに自分のライブラリをインストールすることで、再帰的(?)に開発すればよいのかな?つまり
ProjectA ProjectB <- ProjectAに依存してる
場合、まずProjectAをinstallして、んでProjectBはpom.xmlでProjectAに依存してる、と書いておく、と。
ちなみにインストールしたときのディレクトリ構成ですが
groupId(の.を/で切ったモノ)/artifactId
となるのでgroupIdは適度な長さにしておいた方が良さそうです。EclipseのプラグインIDだと失敗するな(´д`;)↑もうやっちゃった(´д`;)
たとえば以下のコマンドで
mvn install:install-file -DgroupId=javax.transaction -DartifactId=jta \ -Dversion=1.0.1B -Dpackaging=jar -Dfile=jta-1_0_1B.jar
jta-1_0_1B.jar というファイルが上のグループID,プラグインID,バージョンでローカルリポジトリに追加されます。
mvn clean site-deploy
で、htmlドキュメントを作成して所定のサーバにアップすることができます。pom.xmlには以下の内容を書いておく必要があります。
<?xml version="1.0"?> <project> <modelVersion>4.0.0</modelVersion> <groupId>nu.mine.kino.mavensample</groupId> <artifactId>kino-app</artifactId> <name>kino-app</name> <version>1.0-SNAPSHOT</version> <url>http://maven.apache.org</url> <ciManagement> 略 <distributionManagement> <site> <id>ftp-site</id> ↓プット先のディレクトリ <url>ftp://[サーバ名]/var/www/html/hoge</url> </site> </distributionManagement> <build> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ftp</artifactId> <version>1.0-beta-2</version> </extension> </extensions> <sourceDirectory>source</sourceDirectory> 略 </project>
上の例ではFTPでアップするよう指定しているので、
~/.m2/settings.xml
にアップするFTPアカウントを指定しておく必要があります。
<settings> <!-- <proxies> <proxy> <active>true</active> <protocol>http</protocol> <host>hogehoge.jp</host> <port>81</port> <username>fuga</username> <password>fuga</password> <nonProxyHosts>www.google.com|*.hoge.jp</nonProxyHosts> </proxy> </proxies> --> <servers> <server> <id>ftp-site</id> <username>hogehoge</username> <-FTPアカウント <password>fugafuga</password> </server> </servers> </settings>
以上でOKです。。っていいたいところですが、なぜかこれだけでも失敗しちゃいました。ネットにあんまり情報がないところを見ると環境依存なのかもしれないのですが、
bash-3.2$ mvn site:deploy [INFO] [site:deploy] [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Wagon protocol 'ftp' doesn't support directory copying [INFO] ------------------------------------------------------------------------ [INFO] For more information, run Maven with the -e switch [INFO] ------------------------------------------------------------------------
というように、なぜか
Wagon protocol 'ftp' doesn't support directory copying
ってでちゃうんですね。
さて
Wagon protocol 'ftp' doesn't support directory copying
の話です。どうも調べていくと Maven WagonってのはMavenの中で開発されているライブラリ群のようです。うえのpom.xmlにもあるように、 wagon-ftp の 1.0-beta-2 というバージョンのjarだとこれがでちゃうみたい。っていってもこれがMavenのリポジトリ上の最新版みたいなので、ちょっと困ってました。
結局MavenのSubversionのtrunkから最新のソースを取ってきて、jarを作成しました。具体的には WagonのサイトでSubversionのURLを確認して /trunk/wagon-providers と /tags/wagon-1.0-beta-2/wagon-providers をcheckoutして、wagon-1.0-beta-2 の FtpWagon?.java を最新と差し替えて
cd wagon-1.0-beta-2/wagon-providers/wagon-ftp mvn clean package
でjarを作り直してローカルリポジトリのjarを差し替えちゃいました。
これでめでたくFTPプットができるようになりました。
デフォルトではsrc/main/resources/内のファイルはパッケージング時に自動的にjarの直下に格納されるようです。
例えばEclipseのプラグインのようにプロジェクト直下(つまりpom.xmlのとなり)に存在するファイルをjarに格納したい場合は
<build> <sourceDirectory>source</sourceDirectory> <scriptSourceDirectory>main/scripts</scriptSourceDirectory> <testSourceDirectory>test</testSourceDirectory> <outputDirectory>classes</outputDirectory> <testOutputDirectory>target\test-classes</testOutputDirectory> <resources> <resource> <directory>.</directory> <-ここ↓ <includes> <include>plugin.xml</include> <include>plugin.properties</include> </includes> </resource> </resources> ................ </build>
とすればよい。
MANIFEST.MFはMavenが勝手に同梱しちゃうけど、EclipseのプラグインはMANIFEST.MFに色々定義を記述するので、それをそのまま格納したいです。それはプラグインで行います。
<build> ....... <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifestFile>META-INF/MANIFEST.MF</manifestFile> <manifest> <addDefaultSpecificationEntries>false</addDefaultSpecificationEntries> <addDefaultImplementationEntries>false</addDefaultImplementationEntries> </manifest> ↑この二つはまだ用途不明。 </archive> </configuration> </plugin> ........... </plugins> </build>
でもどうもMANIFEST.MFを読み込んでMavenが勝手にいじってしまうらしく、うまくいきません(´д`;)。
http://maven.apache.org/plugins/maven-jar-plugin/source-repository.html
自分で作っちゃう?
基本的にhttp://maven.apache.org/plugins/のプラグインの一覧から、調べたいプラグインをさがして、そのプラグイン用のサイトに遷移。んで左のメニューからソースリポジトリのURLが書いてあるページに飛べばいい。
この記事は
現在のアクセス:65844