顯示具有 Maven 標籤的文章。 顯示所有文章
顯示具有 Maven 標籤的文章。 顯示所有文章

2013年2月7日 星期四

Android + Maven + M2Eclipse All Together

若是想要在Eclipse裡面使用Maven順利開發Android程式,還是需要動一點手腳的,必要工具有以下三項:
  1. android-maven-plugin
  2. m2e-android
  3. maven android archetypes
建議先裝好Spring Tool Suite會比較方便,以下是安裝與使用步驟:
  1. 安裝m2e-android,從Eclipse Marketplace裡面搜尋Android可以找到。

  2. 如果預先裝好STS,那麼只要選第一項就可以了,如果ADT還沒裝,可以在這裡勾選。

  3. 裝好plugin之後重新啟動Eclipse,然後新增一個Maven project,依照以下畫面新增archetype,然後下一步。

  4. 依照自己的需要輸入必要欄位,platform的API就看ADT裡面安裝了哪些版本,預設是16。

  5. 新專案建立之後會有點小問題,一是src/test/java目錄沒開,二是JDK compile版本是1.5,我改成1.6。

  6. 直接Run As Android Application就會看到執行畫面了。

  7. 如果要deploy apk到device上,則需要下maven指令install android:deploy以及設定環境變數。

  8. 設定環境變數ANDROID_HOME,以及在%PATH%中加入%ANDROID_HOME%\tools%ANDROID_HOME%\platform-tools
以上就是全部的設定步驟。

2013年1月30日 星期三

Tuning Artifactory

通常我們會架設內部的Maven repository當做proxy來節省頻寬並加快下載速度,另一方面也將包好的jar / war上傳到repository讓大家使用,這邊記錄的是架設好Artifactory之後應該要調整的參數。
  1. Custom URL Base:自動產生Maven Settings裡的URL才會正確。


  2. Remote Repository Cache:預設是永久保留,但是太久沒使用的舊版library應該被清除。

  3. Max Unique Snapshots:上傳的snapshot版本其實只需要最新的一份,放太多只是浪費空間,預設也是無限制。

2013年1月21日 星期一

Runtime Environment for Continuous Integration with Maven


運行環境會架設四台server:
  1. Subversion
  2. Jenkins
  3. Artifactory (Internal Repository)
  4. Apache HTTP Server (Maven Web Site)

2013年1月7日 星期一

Maven的itext-2.1.7.js1.jar在哪?

新版的JasperReports仍然使用舊版的iText 2.1.7,但是iText已經不再維護舊版本,所以JasperReports自己修正了iText的bug,當我們從maven拉dependency時會發現缺少itext-2.1.7.js1.jar,這個就是JasperReports自己的修正版本,而它並沒有被發佈到Maven public repository,而是在JasperReports自己的repository,將這個repository加到pom.xml或是自行架設的Artifactory Server即可。

網址在此:http://jasperreports.sourceforge.net/maven2/
Dependency:
代碼:
<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itext</artifactId>
  <version>2.1.7.js1</version>
</dependency>

Maven 3 pom.xml 範例

以下是我慣用的maven pom設定,主要是整合了自己架設的Artifactory Server和Web Site,在Jenkins上build的時候執行mvn clean deploy site-deploy。
須注意在report的設定上maven 3和maven 2有不同。
代碼:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.gss.gmo.cao</groupId>
  <artifactId>gmo-cao-hibernate4</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>gmo-cao-hibernate4</name>
  <url>http://www.gss.com.tw</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <springframework.version>3.2.0.RELEASE</springframework.version>
    <hibernate.version>4.1.9.Final</hibernate.version>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
          <encoding>${project.build.sourceEncoding}</encoding>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.1.2</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <phase>package</phase>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.0</version>
        <dependencies>
          <dependency><!-- add support for ssh/scp -->
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>2.1</version>
          </dependency>
          <dependency>
            <groupId>com.gss.gmo.cao</groupId>
            <artifactId>gmo-cao-base</artifactId>
            <version>1.0.0-SNAPSHOT</version>
          </dependency>
        </dependencies>
        <configuration>
          <reportPlugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-project-info-reports-plugin</artifactId>
              <version>2.4</version>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-javadoc-plugin</artifactId>
              <version>2.8</version>
              <configuration>
                <encoding>${project.build.sourceEncoding}</encoding>
                <charset>${project.build.sourceEncoding}</charset>
              </configuration>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jxr-plugin</artifactId>
              <version>2.3</version>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-report-plugin</artifactId>
              <version>2.11</version>
            </plugin>
            <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>cobertura-maven-plugin</artifactId>
              <version>2.5.1</version>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-checkstyle-plugin</artifactId>
              <version>2.8</version>
              <configuration>
                <configLocation>gss_gmo_cao_checks.xml</configLocation>
              </configuration>
            </plugin>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-pmd-plugin</artifactId>
              <version>2.6</version>
              <configuration>
                <linkXref>true</linkXref>
                <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
                <targetJdk>1.6</targetJdk>
              </configuration>
            </plugin>
            <plugin>
              <groupId>org.codehaus.mojo</groupId>
              <artifactId>findbugs-maven-plugin</artifactId>
              <version>2.3.3</version>
            </plugin>
          </reportPlugins>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.gss.gmo.cao</groupId>
      <artifactId>gmo-cao-data</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${springframework.version}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>${hibernate.version}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-envers</artifactId>
      <version>${hibernate.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${springframework.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.hsqldb</groupId>
      <artifactId>hsqldb</artifactId>
      <version>2.2.8</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-ehcache</artifactId>
      <version>${hibernate.version}</version>
      <scope>runtime</scope>
      <exclusions>
        <exclusion>
          <groupId>net.sf.ehcache</groupId>
          <artifactId>ehcache-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache-core</artifactId>
      <version>2.6.2</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>1.8.3</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>0.11.6</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.7.1</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>2.2.2</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>com.gss.gmo.cao</groupId>
      <artifactId>gmo-cao-gson</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <distributionManagement>
    <repository>
      <id>central</id>
      <name>gmo-cao-server.gss.com.tw-releases</name>
      <url>http://172.16.3.146/artifactory/libs-release-local</url>
    </repository>
    <snapshotRepository>
      <id>snapshots</id>
      <name>gmo-cao-server.gss.com.tw-snapshots</name>
      <url>http://172.16.3.146/artifactory/libs-snapshot-local</url>
    </snapshotRepository>
    <site>
      <id>artifactory</id>
      <name>Maven Web Site</name>
      <url>scp://172.16.3.146/home/artifactory/public_html/maven/${artifactId}</url>
    </site>
  </distributionManagement>
</project>
用site-deploy製作出來Maven Site畫面:
螢幕截圖:

M2Eclipse Update Snapshot include Sources

正常狀況下,maven預設只會download jar檔,並不會download javadoc和sources,通常我們會在m2eclipse的設定中選取要下載sources,以方便在Eclipse中瀏覽open source code,又或者是直接在pom.xml裡面指定classifier為sources。

而使用m2eclipse來update sanpshot時預設也只會更新jar檔,而不會更新sources除非是在pom.xml裡面指定classifier為sources,但這樣就用掉classifier屬性並不是好的方法。

依照畫面輸入完成Run Configuration即可在任何maven project執行,它會強制更新所有專案用到的snapshot jar和sources檔案。${project_loc}可從Variables裡面選到。

螢幕截圖: