maven2 之 pom.xml文件
http://www.24xuexi.com/w/2011-05-04/89264.html
如果网络使用的代理,需要对用户的settings.xml作如下配置(默认位于~/.m2目录下):
<settings>
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>proxy.mycompany.com</host>
<port>8080</port>
<username>your-username</username>
<password>your-password</password>
</proxy>
</proxies>
</settings>
Maven的编译插件默认是JDK 1.4的编译级别,为了让Maven的编译插件使用JDK5.0的编译级别,需要对编译插件作如下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
一些IDE没有提供直接创建Maven项目的能力,我们通常的做法是,在命令行创建Maven项目,然后生成特定于IDE的工程定义文件,然后在IDE中打开工程。两个常用的是创建IDE功臣定义文件的命令如下:
mvn idea:idea——用于生成IDEA项目定义文件。
mvn eclipse:eclipse——用于生成Eclipse项目定义文件。
在Maven项目的目录结构中,在src/main/目录下新建一个resources目录,所有放在该目录中的非代码资源会按照原始结构在打包的时候放到JAR(或者WAR等)文件的顶层目录中。在使用mvnpackage命令生成的JAR(或者WAR等)文件中,存在META-INF/MANIFEST.MF文件。我们也可以在resources目录下存放一个META-INF/MANIFEST.MF,并对打包插件进行如下配置,那么Maven在打包的时候就不会自动生成。而是使用用户提供的文件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
</plugin>
另外,在生成的JAR(或者WAR等)文件中的META-INF目录下由一个maven子目录,其中包含了一个pom.xml和pom.properties,这样,这个打包文件就是一个自描述的归档文件。包括groupId、version等信息。
在某些情况下,资源文件中的某些值可能在构建的时候才能确定,比如工程名字、版本信息等等。在这种情况下,可以在资源文件中以${…}的形式定义占位符,在构建的process-resources阶段,Maven会用实际的值去取代占位符。提供占位符确切值的地方可以是:pom.xml中、settings.xml中、外部属性文件中以及系统属性中(经过测试,MANIFEST.MF文件似乎不能进行过滤)。
在Maven构建过程中的process-resources阶段,如果需要执行对占位符的替换操作,需要在pom.xml文件中启用资源的过滤操作:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
有了如上配置我们在资源文件就可以使用pom已有配置信息
eg:我们在src/main/resources下面建立application.properties文件
# application.properties
application.name=${pom.name}
application.version=${pom.version}
运行:mvn process-resources在target/classes下面的application.properties结果为:
# application.properties
application.name=Maven Quick Start Archetype
application.version=1.0-SNAPSHOT
当然filter还可以用其他的外部文件,不一定来自pom.xml[${pom.name} ]以及setting.xml[${settings.localRepository }]
e.g src/main/filters/filter.properties:
# filter.properties
my.filter.value=hello!
pom.xml:
< build >
< filters >
< filter > src/main/filters/filter.properties </ filter >
</ filters >
< resources >
< resource >
< directory > src/main/resources </ directory >
< filtering > true </ filtering >
</ resource >
</ resources >
</ build >
# application.properties
application.name=${pom.name}
application.version=${pom.version}
message=${my.filter.value}
同样可以在pom文件中直接定义my.filter.value常量< build>
<resources>
<resource>
<directory> src/main/resources </directory>
<filtering> true </filtering>
</resource>
</resources>
</build>
<properties>
<my .filter.value> hello </my.filter.value>
</properties>
效果同样,这样就不需要外部文件了。另外filter还可以来自系统设置以及可以自定义:
# application.properties
java.version=${java.version}
command.line.prop=${command.line.prop}
Maven2中,在pom.xml中插件和依赖的定义非常相像,但是在插件定义(或者配置)中,<groupId>和<version>标签在大多数情况下可以省略。如果你没有指定<groupId>,Maven将默认通过org.apache.maven.plugins或者org.codehaus.mojo的<groupId>标签查找插件。你可以在POM文件中指定一个查找的<groupId>也可以在settings.xml等地方指定;如果你没有指定<version>,Maven将尝试使用插件的最新发布版本。
如果希望查看某个Maven插件的可配置选项有哪些,可以使用mvnhelp:describe命令。示例如下:
mvn help:describe-DgroupId=org.apache.maven.plugins-DartifactId=maven-compiler-plugin -Dfull=true
或者,你也可以在http://maven.apache.org/plugins/查找详细的插件信息。
默认情况下,项目的非代码资源文件放在src/main/resource目录下,测试所需的非代码资源放在src/test/resource目录下。这是定义在SuperPOM文件中的。我们可以改变这个设置,但是不应该这么做。
执行native2ascii命令转换国际化i18n资源文件,添加如下插件配置(使用默认路径需要在src/main下添加native2ascii路径,就不需要配置resource那么复杂了)
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>native2ascii-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>native2ascii</goal>
</goals>
<!-- specific configurations-->
<configuration>
<dest>target/classes</dest>
<encoding>UTF8</encoding>
<includes>
*.properties
</includes>
</configuration>
</execution>
</executions>
</plugin>
执行copy资源文件构建生产环境配置文件 hibernate项
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>prepare-dependencies-repackage-copy</id>
<phase>generate-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<copy todir="target/classes/com/cmcc/hibernate"overwrite="true">
<filesetdir="src/main/java/com/cmcc/hibernate">
<include name="**/*.hbm.xml"/>
</fileset>
</copy>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
最后是项目引用,jar包依赖关系的配置
我们在mvn install后在local repo中生成的jar包也可以被其他项目所引用
<dependency>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
注意scope,这里是compile,如果使用junit,scope是test。
举例说明:如果我们的project需要用到log4j包,那么我们可以先google--"site:www.ibiblio.org maven2 log4j"。Indexof /maven2/log4j/log4j 下面有maven-metadata.xml描述了groupId,artifactId,version等等。获取了这些信息之后,你 就可以在pom.xml中添加依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
<scope>compile</scope>
</dependency>
如何发布我的jar包到我的remote repository
你需要在setting.xml中间设置server:
<servers>
<server>
<id>mycompany-repository</id>
<username>jvanzyl</username>
<!--Default value is ~/.ssh/id_dsa-->
<privateKey>/path/to/identity</privateKey>
<passphrase>my_key_passphrase</passphrase>
</server>
</servers>
然后在pom.xml中设置远程url:
<distributionManagement>
<repository>
<id>mycompany-repository</id>
<name>MyCompanyRepository</name>
<url>scp://repository.mycompany.com/repository/maven2</url>
</repository>
</distributionManagement>