#author("2021-12-14T01:53:10+00:00","","")
#author("2021-12-14T02:32:27+00:00","","")
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents

** -source 1.3 でサポートされていません とか言われる場合 [#ea21bc89]
[[ソースのバージョン - TzlTTqTjの日記>http://d.hatena.ne.jp/TzlTTqTj/20090111/1231625637]]を参考にさせていただきました!ビルドの設定を下記のように書き替えればよい
 <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>
とか指定すれば、文字エンコーディングによるコンパイルエラーなども回避できるぽい。


**フェーズ [#i93a5c7c]
フェーズとは mvn complieとかmvn installとか、プロジェクトをビルドするための一つの集まりのこと。フェーズを指定するとそれに関連付いたゴールが一つ以上実行される。関連づけは、そのプロジェクトのアーティファクトのタイプやpom.xmlの情報から、Mavenが勝手に判断するらしい。

-[[Maven 2.0を知る、使う>http://www.itarchitect.jp/enterprise/-/45149-2.html]]

またフェーズには validate -> compile -> test -> deployなどと実行順序などが定義されている。これをビルドライフサイクルという。

デフォルトのライフサイクルは 
 ${MAVEN_HOME}/lib/maven-core-2.0.7-uber.jar#META-INF/plexus/components.xml
に定義されている。[[components.xml>http://svn.apache.org/repos/asf/maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml]]




**リポジトリにプロキシ経由で接続する [#q56c97dc]
 ~/.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>
-[[Maven事始め>http://www.limy.org/program/java/maven/first.html]]


**プロジェクト作成。 [#bf93876d]
 mvn archetype:create -DgroupId=nu.mine.kino.mavensample -DartifactId=kino-app
グループIDとプラグインIDを指定するんですね。

**pom.xmlからEclipseのプロジェクトを生成する。 [#gab0f1a9]
 mvn eclipse:eclipse
これでEclipse関連のファイルができあがります。以後、Eclipse上で管理できるわけですね。

出力されるファイル内で
 M2_REPO
という変数を使用しているので、Eclipseの変数としてM2_REPOを定義しておきます。値はローカルリポジトリへのパスを指定しておきます。



**プロジェクトの構成を出力する [#ka7ac4ca]
通常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>
が出力されました。ファイルにリダイレクトして、ちょこちょこ編集して使うことができて便利です。デフォルト値がでてるのがよいですね。


**settings.xmlの構成を出力する [#g669e4e0]
 mvn help:effective-settings -Doutput=effective-settings.xml
でデフォルトのsettings.xmlが出力される


**ローカルリポジトリを変更する [#ha9a3300]
デフォルトは
 ~/.m2/repository
のヤツ。Mavenのインストールディレクトリ配下などにある、settings.xmlで変更可能です。
 <?xml version="1.0"?><settings>
  <localRepository>~/.m2/repositoryNew</localRepository> <-こんな感じ。
  <servers>...
  </servers>
 </settings>

http://slashdot.jp/~pluto/journal/328571



**依存するライブラリを追加する [#lf96b8c4]
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 />
は必須みたいですね。




**サイトを作成する [#d4edf8f0]

**作成したサイトに、様々な情報を載せる [#a02f8db3]


**ソースをjarにする [#m37c1720]
 mvn package
でjarが作成されます。

**ローカルリポジトリにjarを配置する [#nbd0b05a]
 mvn install
で該当プロジェクトがローカルリポジトリ(~/.m2のことです)にインストールされます。複数のプロジェクトが依存しあってる構成で開発するときはローカルリポジトリに自分のライブラリをインストールすることで、再帰的(?)に開発すればよいのかな?つまり
 ProjectA
 ProjectB <- ProjectAに依存してる
場合、まずProjectAをinstallして、んでProjectBはpom.xmlでProjectAに依存してる、と書いておく、と。

-[[依存Jarをローカルリポジトリに追加する>http://72.14.235.104/search?q=cache:GPA3Hd7qYD8J:hpcgi2.nifty.com/wutse/wifky/wifky.cgi%3Fp%3D%255BMaven2%255D%25B0%25CD%25C2%25B8Jar%25A4%25F2%25A5%25ED%25A1%25BC%25A5%25AB%25A5%25EB%25A5%25EA%25A5%25DD%25A5%25B8%25A5%25C8%25A5%25EA%25A4%25CB%25C4%25C9%25B2%25C3%25A4%25B9%25A4%25EB+Maven2+%E4%BE%9D%E5%AD%98&hl=ja&ct=clnk&cd=3&gl=jp&lr=lang_ja]]

ちなみにインストールしたときのディレクトリ構成ですが
 groupId(の.を/で切ったモノ)/artifactId
となるのでgroupIdは適度な長さにしておいた方が良さそうです。EclipseのプラグインIDだと失敗するな(´д`;)↑もうやっちゃった(´д`;)

**ローカルリポジトリに任意のjarを追加する [#k7968584]
たとえば以下のコマンドで
 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,バージョンでローカルリポジトリに追加されます。


**Mavenのpom.xmlのスキーマ [#pff8c406]
-[[Maven Model>http://maven.apache.org/ref/2.0.4/maven-model/maven.html]]

**pom.xmlの説明 [#id206df3]
-[[pom.xml>http://www.limy.org/program/java/maven/project.html]]

**site:deployで、作成したサイトをWEBに公開する。 [#nf134d5a]
 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.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>
   -->
   <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
ってでちゃうんですね。

**site:deployでFTPに失敗する。 [#e0ba4f36]
さて
 Wagon protocol 'ftp' doesn't support directory copying
の話です。どうも調べていくと [[Maven Wagon>http://maven.apache.org/wagon/]]ってのはMavenの中で開発されているライブラリ群のようです。うえのpom.xmlにもあるように、 wagon-ftp の 1.0-beta-2 というバージョンのjarだとこれがでちゃうみたい。っていってもこれが[[Mavenのリポジトリ上>http://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ftp/]]の最新版みたいなので、ちょっと困ってました。

結局MavenのSubversionのtrunkから最新のソースを取ってきて、jarを作成しました。具体的には
[[Wagonのサイト>http://maven.apache.org/wagon/source-repository.html]]でSubversionのURLを確認して
[[/trunk/wagon-providers>http://svn.apache.org/repos/asf/maven/wagon/trunk/wagon-providers/]] と [[/tags/wagon-1.0-beta-2/wagon-providers>http://svn.apache.org/repos/asf/maven/wagon/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プットができるようになりました。

**jarに同梱するリソースを指定する。 [#ac7722ce]
デフォルトでは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を同梱したい。 [#k31d7db2]
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


自分で作っちゃう?

-[[Maven2 で JAR の Manifest ファイルを設定する方法をメモ>http://www.in-vitro.jp/blog/index.cgi/Maven/20060215_01.htm]]

**プラグインのソースコードを入手する [#ze9e3d68]
基本的にhttp://maven.apache.org/plugins/のプラグインの一覧から、調べたいプラグインをさがして、そのプラグイン用のサイトに遷移。んで左のメニューからソースリポジトリのURLが書いてあるページに飛べばいい。


----
この記事は
#vote(おもしろかった[25],そうでもない[4])
#vote(おもしろかった[26],そうでもない[4])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS