因为整个项目是用maven管理发布和部署的,下面是整个项目的部署配置文件pom.xml。
maven在做其他项目的时候也用过,但是也只限于基本 的应用。
1.头部文件
xml文件都有自己的xml schema,pom.xml的头文件就如下所示:
<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/maven-v4_0_0.xsd">
xmlns: 是xml文件的nameSpace,xmlns:xsi是该 文件的标识符。xsi:schemaLocation才是pom.xml的xml schema 。
http://maven.apache.org/maven-v4_0_0.xsd 这个里面定义了pom.xml里面应用的每个标签的限制和格式。
http://maven.apache.org/POM/4.0.0 是xml schema的命名空间 。
· maven的pom.xml的Schemad的一级目录展开信息如下
定义了只有一个元素project ,并且定义了Model之类的复杂类型。
<?xml version="1.0"?>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://maven.apache.org/POM/4.0.0" xmlns="http://maven.apache.org/POM/4.0.0">
+ <xs:element name="project" type="Model">
+ <xs:complexType name="Model">
+ <xs:complexType name="Contributor">
+ <xs:complexType name="Profile">
+ <xs:complexType name="Activation">
+ <xs:complexType name="ActivationFile">
+ <xs:complexType name="ActivationProperty">
+ <xs:complexType name="ActivationOS">
+ <xs:complexType name="DependencyManagement">
+ <xs:complexType name="Dependency">
+ <xs:complexType name="Exclusion">
+ <xs:complexType name="Reporting">
+ <xs:complexType name="ReportPlugin">
+ <xs:complexType name="ReportSet">
+ <xs:complexType name="BuildBase">
+ <xs:complexType name="Plugin">
+ <xs:complexType name="PluginExecution">
+ <xs:complexType name="PluginManagement">
+ <xs:complexType name="Resource">
+ <xs:complexType name="DistributionManagement">
+ <xs:complexType name="Site">
+ <xs:complexType name="Relocation">
+ <xs:complexType name="DeploymentRepository">
+ <xs:complexType name="Repository">
+ <xs:complexType name="RepositoryPolicy">
+ <xs:complexType name="MailingList">
+ <xs:complexType name="Build">
+ <xs:complexType name="Extension">
+ <xs:complexType name="IssueManagement">
+ <xs:complexType name="Parent">
+ <xs:complexType name="Prerequisites">
+ <xs:complexType name="CiManagement">
+ <xs:complexType name="Notifier">
+ <xs:complexType name="License">
+ <xs:complexType name="Developer">
+ <xs:complexType name="Scm">
+ <xs:complexType name="Organization">
</xs:schema>
2.基本信息
<modelVersion>4.0.0</modelVersion>
<groupId>com.notehive.osgi</groupId>
<artifactId>hibernate-samples</artifactId>
<packaging>pom</packaging>
<version>1.0.0.SNAPSHOT</version>
<name>osgi 3rdparty</name>
POM包括了所有的项目信息。
maven 相关:
pom定义了最小的maven2元素集合,包括groupId,artifactId,version。
所有需要的元素
· groupId:项目或者组织的唯 一标志,并且配置时生成的路径也是由此生成,如org.codehaus.mojo生成的相对路径为:/org/codehaus/mojo
· artifactId: 项目的通用名称
· version:项目的版本
· packaging: 打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par
· classifier: 分类
· Name:名称
3. 关系
Pom的关系:主要包含 合成 依赖 继承
l 合成:一个项目合成多个模块,如下所示。
<modules>
<module>provision</module>
<module>jta</module>
<module>hibernate-classes</module>
<module>hsqldb</module>
<module>hibernate-session</module>
<module>model-a</module>
<module>model-b</module>
<module>application</module>
<module>integration-tests</module>
<module>deployment</module>
</modules>
这些模块都是项目中的其他项目。
l 配置信息
<properties>
<spring.maven.artifact.version>
2.5.4
</spring.maven.artifact.version>
<spring.dm.version>
1.0.2
</spring.dm.version>
</properties>
这些配置是为了依赖里面的项目版本设置的。
l 依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>osgi</artifactId>
<version>3.3.0-v20070530</version>
</dependency>
Org.eclipse osgi是依赖OSGi的核心jar包。
下面的依赖全部和Spring OSGi Frame work相关。
<!-- BEGIN: Spring OSGi Framework -->
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>spring-osgi-core</artifactId>
<version>${spring.dm.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>spring-osgi-extender</artifactId>
<version>${spring.dm.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>spring-osgi-io</artifactId>
<version>${spring.dm.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>spring-osgi-mock</artifactId>
<version>${spring.dm.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>spring-osgi-annotation</artifactId>
<version>${spring.dm.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>aopalliance.osgi</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>junit.osgi</artifactId>
<version>3.8.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.osgi</groupId>
<artifactId>log4j.osgi</artifactId>
<version>1.2.15-SNAPSHOT</version>
</dependency>
<!-- END: Spring OSGi Framework -->
下面的依赖都是依赖Spring.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.maven.artifact.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
l 编译部署
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
n Maven的编译插件
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
n Configuration:指定插件配置
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
n Extensions:是否应用插件扩展
<version>1.4.0</version>
<configuration>
<instructions>
<manifestLocation>META-INF</manifestLocation>
<_include>-osgi.bnd</_include>
n 将jar文件转换为OSGi的bundle文件的插件工具Bnd的基本配置,是将osgi.bnd文件转换为OSGi的配置文件manifest
</instructions>
</configuration>
</plugin>
</plugins>
</build>
l 仓库
<repositories>
<repository>
<id>apache.m2.incubator</id>
<name>Apache M2 Incubator Repository</name>
<url>
http://people.apache.org/repo/m2-incubating-repository/
</url>
</repository>
<repository>
<id>eclipse-repository</id>
<name>Eclipse Repository</name>
<url>http://repo1.maven.org/eclipse/</url>
</repository>
<repository>
<id>safehaus-repository</id>
<name>Safehaus Repository</name>
<url>http://m2.safehaus.org</url>
</repository>
<repository>
<id>spring-ext</id>
<name>Spring External Dependencies Repository</name>
<url>
https://springframework.svn.sourceforge.net/svnroot/springframework/repos/repo-ext/
</url>
</repository>
<repository>
<id>i21-s3-osgi-repo</id>
<name>i21 osgi artifacts repo</name>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>
http://s3.amazonaws.com/maven.springframework.org/osgi
</url>
</repository>
<repository>
<id>i21-s3-maven-repo</id>
<name>i21 S3 milestone repo</name>
<url>
http://s3.amazonaws.com/maven.springframework.org/milestone
</url>
</repository>
<repository>
<id>ops4j-repo</id>
<name>ops4j repo</name>
<url>http://repository.ops4j.org/maven2/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven-repo</id>
<name>maven repo</name>
<url>http://repo1.maven.org/maven2/</url>
</pluginRepository>
n Maven的中心仓库
</pluginRepositories>
</project>
资料:
英文http://www.aqute.biz/Sales/OSGi 中文http://www.aqute.biz/Code/BndCn