`

利用maven组装项目

 
阅读更多

一个java工程中,一定会用的很多第三方的jar包。如何快速发布自己的工程和项目是一个需要掌握的技巧。maven是现在比较流行的项目管理工具。通过它的maven-jar-plugin和maven-assembly-plugin可以实现一个工程的快速自动发布。

我要进行发布的目标工程是一个osgi的插件工程,具有如下的特点:

1、通过org.tkxing.main.OptimizatorMain启动apache felix osgi框架和调用在felix osgi中发布的服务。

2、osgi的系统和业务bundle放在bundles目录中。

3、felix框架的配置文件放在conf目录中。

4、利用log4j作为系统的日志管理系统,配置文件log4j.xml放在项目根目录下。

希望通过maven完成的系统目录如下:

 

在完成的过程中,利用maven-jar-plugin和maven-assembly-plugin分成两步完成工程的发布。

1、生成org.tkxing.stock.test-1.0.jar

     利用maven-jar-plugin生成这个可执行的jar包,需要完成两项的设置,一是jar包的main class,二是jar包利用其他jar的classpath,在pom文件中设置如下:

<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>2.3.1</version>
				<configuration>
                     <archive>  
                          <manifest>  
    						   <addClasspath>true</addClasspath>
    						   <classpathPrefix>lib/</classpathPrefix>
                               <mainClass>org.tkxing.main.OptimizatorMain</mainClass>  
                          </manifest>  
                     </archive>  
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
					</execution>
				</executions>
			</plugin>

  其中的manifest标签中的内容,将会添加在生成的jar包的manifest.mf文件中。

2、装配整个工程

     利用maven的maven-assembly-plugin来完成整个项目的装配工作,在pom文件中,设置装配的具体要求,利用assembly.xml文件定义:

<assembly
	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
	<id>jar-with-dependencies</id>
	<formats>
		<format>dir</format>
	</formats>
	<includeBaseDirectory>false</includeBaseDirectory>
	<dependencySets>
		<dependencySet>
			<useProjectArtifact>true</useProjectArtifact>
			<outputDirectory>/</outputDirectory>
			<includes>
				<include>org.tkxing.stock:org.tkxing.stock.test</include>
			</includes>		
		</dependencySet>
		<dependencySet>
			<useProjectArtifact>false</useProjectArtifact>
			<outputDirectory>lib/</outputDirectory>
			<excludes>
				<exclude>org.springframework:spring-beans</exclude>
				<exclude>org.springframework:spring-asm</exclude>
				<exclude>org.springframework:spring-core</exclude>
				<exclude>org.springframework:spring-aop</exclude>
				<exclude>org.springframework:spring-context</exclude>
				<exclude>org.springframework:spring-expression</exclude>
				<exclude>org.springframework:spring-jms</exclude>
				<exclude>org.springframework:spring-tx</exclude>
			</excludes>
		</dependencySet>
	</dependencySets>

	<fileSets>
		<fileSet>
			<directory>conf</directory>
			<outputDirectory>conf</outputDirectory>
		</fileSet>
		<fileSet>
			<directory>bundles</directory>
			<outputDirectory>bundles</outputDirectory>
		</fileSet>
	</fileSets>
	
	<files>
		<file>
			<source>log4j.xml</source>
			<outputDirectory>/</outputDirectory>
		</file>
	</files>
	
</assembly>

  其中,formats部分,定义装配的结果是一个目录。

           dependencySets部分中定义了两个dependencySet,第一个dependencySet的目的是把可运行的jar放在根目录下,利用的include选项;第二个dependencySet的目的是把所有依赖的jar包放在lib目录下,并利用excludes排除重复的jar包。

          fileSets部分定义了把bundles和conf目录进行打包

          files部分定义了打包log4j.xml文件。

 

通过以上两步,就完成了一个工程的打包。

 

完整的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/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.tkxing.stock</groupId>
		<artifactId>org.tkxing.stock</artifactId>
		<version>1.0</version>
	</parent>


	<artifactId>org.tkxing.stock.test</artifactId>
	<packaging>jar</packaging>

	<dependencies>
		<dependency>
			<groupId>com.googlecode</groupId>
			<artifactId>transloader</artifactId>
			<version>0.4</version>
		</dependency>


		<dependency>
			<groupId>org.tkxing.stock</groupId>
			<artifactId>org.tkxing.stock.dao.impl</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.tkxing.stock</groupId>
			<artifactId>org.tkxing.stock.ruleengine.impl</artifactId>
			<version>1.0</version>
		</dependency>

		<dependency>
			<groupId>org.tkxing.stock</groupId>
			<artifactId>org.tkxing.stock.sourcedata.getter</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.tkxing.stock</groupId>
			<artifactId>org.tkxing.stock.sourcedata.getter.impl</artifactId>
			<version>1.0</version>
		</dependency>

		<dependency>
			<groupId>org.tkxing.stock</groupId>
			<artifactId>org.tkxing.stock.sourcedata.disassemble</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>org.tkxing.stock</groupId>
			<artifactId>org.tkxing.stock.sourcedata.disassemble.impl</artifactId>
			<version>1.0</version>
		</dependency>

		<dependency>
			<groupId>org.jboss.javassist</groupId>
			<artifactId>com.springsource.javassist</artifactId>
			<version>3.9.0.GA</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>com.springsource.org.hibernate</artifactId>
			<version>3.3.2.GA</version>
		</dependency>

		<dependency>
			<groupId>org.antlr</groupId>
			<artifactId>com.springsource.antlr</artifactId>
			<version>2.7.7</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>com.springsource.org.apache.commons.collections
			</artifactId>
			<version>3.2.0</version>
		</dependency>
		<dependency>
			<groupId>org.dom4j</groupId>
			<artifactId>com.springsource.org.dom4j</artifactId>
			<version>1.6.1</version>
		</dependency>
		<dependency>
			<groupId>javax.xml.stream</groupId>
			<artifactId>com.springsource.javax.xml.stream</artifactId>
			<version>1.0.1</version>
		</dependency>
		<dependency>
			<groupId>org.objectweb.asm</groupId>
			<artifactId>com.springsource.org.objectweb.asm</artifactId>
			<version>1.5.3</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>com.springsource.slf4j.nop</artifactId>
			<version>1.6.1</version>
		</dependency>

		<dependency>
			<groupId>javax.transaction</groupId>
			<artifactId>com.springsource.javax.transaction</artifactId>
			<version>1.1.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>com.springsource.org.apache.commons.dbcp</artifactId>
			<version>1.2.2.osgi</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>org.springframework.aspects</artifactId>
			<version>3.0.4.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>org.springframework.context.support</artifactId>
			<version>3.0.4.RELEASE</version>
		</dependency>


		<!--
			<dependency> <groupId>org.aspectj</groupId>
			<artifactId>com.springsource.org.aspectj.weaver</artifactId>
			<version>1.6.8.RELEASE</version> </dependency> <dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>com.springsource.org.aspectj.runtime</artifactId>
			<version>1.6.8.RELEASE</version> </dependency>
		-->

		<dependency>
			<groupId>com.sun.xml</groupId>
			<artifactId>com.springsource.com.sun.tools.xjc</artifactId>
			<version>2.1.7</version>
		</dependency>

		<dependency>
			<groupId>javax.activation</groupId>
			<artifactId>com.springsource.javax.activation</artifactId>
			<version>1.1.1</version>
		</dependency>
		<dependency>
			<groupId>org.antlr</groupId>
			<artifactId>com.springsource.org.antlr.runtime</artifactId>
			<version>3.1.3</version>
		</dependency>
		<dependency>
			<groupId>com.thoughtworks.xstream</groupId>
			<artifactId>com.springsource.com.thoughtworks.xstream</artifactId>
			<version>1.3.1</version>
		</dependency>

		<dependency>
			<groupId>org.mvel</groupId>
			<artifactId>mvel2</artifactId>
			<version>2.0.19</version>
		</dependency>
		<dependency>
			<groupId>net.sourceforge.jexcelapi</groupId>
			<artifactId>com.springsource.jxl</artifactId>
			<version>2.6.6</version>
		</dependency>
		<dependency>
			<groupId>org.tkxing.stock</groupId>
			<artifactId>org.tkxing.stock.sourcedata.intergration</artifactId>
			<version>1.0</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.tkxing.stock</groupId>
			<artifactId>org.tkxing.stock.predict</artifactId>
			<version>1.0</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.tkxing.stock</groupId>
			<artifactId>org.tkxing.stock.predict.impl</artifactId>
			<version>1.0</version>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>org.tkxing.activemq</groupId>
			<artifactId>activemqengine</artifactId>
			<version>1.0</version>
		</dependency>

		<dependency>
			<groupId>org.apache.activemq</groupId>
			<artifactId>activemq-core</artifactId>
			<version>5.5.0</version>
			<exclusions>
				<exclusion>
					<groupId>org.osgi</groupId>
					<artifactId>org.osgi.core</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>org.objectweb.howl</groupId>
			<artifactId>com.springsource.org.objectweb.howl</artifactId>
			<version>1.0.2</version>
		</dependency>


	</dependencies>

	<build>

		<plugins>
	
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<compilerVersion>1.5</compilerVersion>
					<fork>true</fork>
					<source>1.5</source>
					<target>1.5</target>
				</configuration>
			</plugin>
  
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>2.3.1</version>
				<configuration>
                     <archive>  
                          <manifest>  
    						   <addClasspath>true</addClasspath>
    						   <classpathPrefix>lib/</classpathPrefix>
                               <mainClass>org.tkxing.main.OptimizatorMain</mainClass>  
                          </manifest>  
                     </archive>  
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
					</execution>
				</executions>
			</plugin>

          <plugin>  
              <artifactId>maven-assembly-plugin</artifactId>  
              <configuration>  
                    <descriptors>  
                        <descriptor>assembly.xml</descriptor>  
                   </descriptors>  
              </configuration>  
              	<executions>
					<execution>
						<phase>install</phase>
						<goals>
							<goal>single</goal>
						</goals>
						<configuration>
							<outputDirectory>d:/temp/stock</outputDirectory>
						</configuration>
					</execution>
				</executions>
              
         </plugin>  
   
		</plugins>

	</build>


</project>
 

 

 

 

 

 

 

  • 大小: 4.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics