`
qindongliang1922
  • 浏览: 2171072 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117075
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125421
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59491
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71017
社区版块
存档分类
最新评论

使用Ant打包整个项目

    博客分类:
  • JAVA
阅读更多
Maven的出现,使得项目管理,更加方便,快捷,但并不意味着Ant就从此消失了,现在很多的Apache的项目,依旧提供了Ant编译的方式,有的既提供了Ant的编译方式,也提供了Maven的编译方式,他们的优劣,散仙在这里就不加以讨论了,因为这种话题没什么具体的意义,合适的项目就选择合适的构建工具即可!

1,我们先看下,使用ant打包整个项目,并运行的例子:散仙的例子里,使用的jar包有lucene的,也有jdk自带的,所以打包整个项目,并使用java -cp xx.jar ,项目的主要两个测试类如下:



package com.study.lucene;

/**
 * 
 * 仅仅依赖JDK运行
 * 
 * 
 * 
 * **/
public class TestReadControl {
	
	
	public static void main(String[] args) {
		
		
		if(args.length<1){
			System.out.println("你没有传递任何参数!");
		}else{
			
			for(String s:args){
				System.out.println("你传递的是: "+s);
			}
		}
		

		
		
	}

}

package com.study.lucene;

import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.miscellaneous.PatternAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;


/**
 * 
 * 依赖lucene和jdk
 * 
 * 
 * **/

public class TestAnalysis {
	
	
	public static void main(String[] args) throws Exception {
		
		String text="你没有输入任何内容!";
		if(args.length==1){
		 text=args[0];
		}
		    Analyzer analyzer=new StandardAnalyzer();  
	         //空字符串代表单字切分    
	        TokenStream ts= analyzer.tokenStream("field", new StringReader(text));  
	        CharTermAttribute term=ts.addAttribute(CharTermAttribute.class);  
	        ts.reset();  
	        while(ts.incrementToken()){  
	            System.out.println(term.toString());  
	        }  
	        ts.end();  
	        ts.close();  
		
		
	}

}



当前的结构路径,如下:


注意,lucene依赖的jar包,在build.xml里有依赖拷贝,下面看下build.xml里面的内容:

<project name="${component.name}" basedir="." default="jar">
	<property environment="env"/>
	<!--
	
	如果在这个地方配置hadoop的home,只需编译时用,
	在project.classpath里面定义home即可
	<property name="hadoop.home" value="${env.HADOOP_HOME}"/>
	-->
	
	<property name="hadoop.home" value="D:\hadooplib"/>
	<property name="lucene.home" value="D:\lucenelib"/>
	<!-- 指定jar包的名字 -->
	<property name="jar.name" value="myjob.jar"/>
	<!-- 编译时的依赖环境 -->
	<path id="project.classpath">
		
		<fileset dir="lib">
			<include name="*.jar" />
		</fileset>
		
		<fileset dir="${lucene.home}">
					<include name="*.jar" />
		</fileset>
		<!--  <fileset dir="${hadoop.home}">
			<include name="**/*.jar" />
		</fileset>  -->
		
	</path>
	<!-- 编译前清空上次的bin文件 -->
	<target name="clean" >
	 	<delete dir="bin" failonerror="false" />
		<mkdir dir="bin"/>
 	</target>	
	
	<!-- 构建编译源码 -->
	<target name="build" depends="clean">
 		<echo message="${ant.project.name}: ${ant.file}"/>
 		<javac destdir="bin" encoding="utf-8" debug="true" includeantruntime="false" debuglevel="lines,vars,source">
            <src path="src"/>
 			<exclude name="**/.svn" />
            <classpath refid="project.classpath"/>
        </javac>
		<copy todir="bin">
			<fileset dir="src">
				<include name="*config*"/>
			</fileset>
		</copy>
 	</target>
	
	
	<!-- 构建jar包时,会拷贝到lib目录里  -->
	
 	<target name="jar" depends="build">
 		<copy todir="bin/lib">
 			<fileset dir="lib">
 				<include name="**/*.*"/>
	 		</fileset>
 		</copy>
 		 
 		
 	<!-- 去掉下面的注释时,下面的lib包会被拷贝到lib目录里  -->	 
 		
 	<!--	<echo message="111"/> -->
 	 	<copy todir="bin/lib">  
 					<fileset dir="${lucene.home}"> 
 		 				<include name="**/*.*"/> 
 			 		</fileset>
 		 		</copy>
 		<!--<echo message="222"/>-->
        
 		
 		
 		
 		
 		<!--  lib-classpath , my.classpath,可以直接在linux上对应的home里,加载lib包  -->
 		<path id="lib-classpath">
 			<fileset dir="lib" includes="**/*.jar" />
 			<fileset dir="${lucene.home}" includes="**/*.jar" />
 		</path>
 		
 		<pathconvert property="my.classpath" pathsep=" " >
 			<mapper>
 		    	<chainedmapper>
 		        	<!-- 移除绝对路径 -->
 		        	<flattenmapper />
 		        	<!-- 加上lib前缀 -->
 		        	<globmapper from="*" to="lib/*" />
 		       </chainedmapper>
 		     </mapper>
 		     <path refid="lib-classpath" />
 		</pathconvert>
 		
 		
 		
 		
 		
 		
 		<jar basedir="bin" destfile="${jar.name}" >
 			<include name="**/*"/>
 			<!-- define MANIFEST.MF -->
 			<manifest>
				<attribute name="Class-Path" value="${my.classpath}" />
 			</manifest>
 			
 		</jar>
 	</target>
</project>



然后在对应的同级目录下提供lib目录,放入依赖的jar包即可



第二种方式,编译时候在windows上,引入需要依赖的jar,但并不把依赖的jar包打入lib目录下,然后再linux上,使用cp命令,把依赖的jar包拷贝入:

<project name="${component.name}" basedir="." default="jar">
	<property environment="env"/>
	<!--
	
	如果在这个地方配置hadoop的home,只需编译时用,
	在project.classpath里面定义home即可
	<property name="hadoop.home" value="${env.HADOOP_HOME}"/>
	-->
	
	<property name="hadoop.home" value="D:\hadooplib"/>
	<property name="lucene.home" value="D:\lucenelib"/>
	<!-- 指定jar包的名字 -->
	<property name="jar.name" value="myjob.jar"/>
	<!-- 编译时的依赖环境 -->
	<path id="project.classpath">
		
		<fileset dir="lib">
			<include name="*.jar" />
		</fileset>
		
		<fileset dir="${lucene.home}">
					<include name="*.jar" />
		</fileset>
		<!--  <fileset dir="${hadoop.home}">
			<include name="**/*.jar" />
		</fileset>  -->
		
	</path>
	<!-- 编译前清空上次的bin文件 -->
	<target name="clean" >
	 	<delete dir="bin" failonerror="false" />
		<mkdir dir="bin"/>
 	</target>	
	
	<!-- 构建编译源码 -->
	<target name="build" depends="clean">
 		<echo message="${ant.project.name}: ${ant.file}"/>
 		<javac destdir="bin" encoding="utf-8" debug="true" includeantruntime="false" debuglevel="lines,vars,source">
            <src path="src"/>
 			<exclude name="**/.svn" />
            <classpath refid="project.classpath"/>
        </javac>
		<copy todir="bin">
			<fileset dir="src">
				<include name="*config*"/>
			</fileset>
		</copy>
 	</target>
	
	
	<!-- 构建jar包时,会拷贝到lib目录里  -->
	
 	<target name="jar" depends="build">
 		<copy todir="bin/lib">
 			<fileset dir="lib">
 				<include name="**/*.*"/>
	 		</fileset>
 		</copy>
 		 
 		
 	<!-- 去掉下面的注释时,下面的lib包会被拷贝到lib目录里  -->	 
 		
 	<!--	<echo message="111"/> 
 	 	<copy todir="bin/lib">  
 					<fileset dir="${lucene.home}"> 
 		 				<include name="**/*.*"/> 
 			 		</fileset>
 		 		</copy>-->
 		<!--<echo message="222"/>-->
        
 		
 		
 		
 		
 		<!--  lib-classpath , my.classpath,可以直接在linux上对应的home里,加载lib包  -->
 		<!-- 将jar包的路径载入classpath里 -->
 		<path id="lib-classpath">
 			<fileset dir="lib" includes="**/*.jar" />
 		<!--	<fileset dir="${lucene.home}" includes="**/*.jar" /> -->
 		</path>
 		
 		<pathconvert property="my.classpath" pathsep=" " >
 			<mapper>
 		    	<chainedmapper>
 		        	<!-- 移除绝对路径 -->
 		        	<flattenmapper />
 		        	<!-- 加上lib前缀 -->
 		        	<globmapper from="*" to="lib/*" />
 		       </chainedmapper>
 		     </mapper>
 		     <path refid="lib-classpath" />
 		</pathconvert>
 		
 		
 		
 		
 		
 		
 		<jar basedir="bin" destfile="${jar.name}" >
 			<include name="**/*"/>
 			<!-- define MANIFEST.MF -->
 			<manifest>
				<attribute name="Class-Path" value="${my.classpath}" />
 			</manifest>
 			
 		</jar>
 	</target>
</project>


linux下的目录
drwxrwxr-x 4 search search     4096 Nov 12 17:10 bin
-rw-rw-r-- 1 search search     2740 Nov 12 17:07 build.xml
drwxrwxr-x 2 search search     4096 Nov 12 17:10 lib
-rw-rw-r-- 1 search search 25726164 Nov 12 17:10 myjob.jar
drwxrwxr-x 3 search search     4096 Nov 12 17:10 src
-rw-rw-r-- 1 search search      577 Nov 12 17:27 ss.sh
[search@fsedump03sand LuceneDemo]$ 


执行脚本如下:

[search@fsedump03sand LuceneDemo]$ cat ss.sh 



cs='.:'

libpath="/home/search/lucenedemo/lib/lucenelib/"

#jarlib=`ls $libpath`


#echo $jarlib


for txt in `ls $libpath` 

do

 
   cs=$cs$libpath$txt:



done


#拼接上主程序类
cs=$cs"./myjob.jar"

echo $cs



echo "运行没有依赖的jar包"
java -cp myjob.jar com.study.lucene.TestReadControl
echo "===================运行有依赖,无传参======================="
java -cp $cs   com.study.lucene.TestAnalysis
echo "======================运行有依赖,有传参===================="
java -cp $cs   com.study.lucene.TestAnalysis "i am 啊 中国人 "


运行结果如下:
[search@fsedump03sand LuceneDemo]$ sh ss.sh    
.:/home/search/lucenedemo/lib/lucenelib/lucene-analyzers-common-4.10.2.jar:/home/search/lucenedemo/lib/lucenelib/lucene-core-4.10.2.jar:/home/search/lucenedemo/lib/lucenelib/lucene-queryparser-4.10.2.jar:./myjob.jar
运行没有依赖的jar包
你没有传递任何参数!
===================运行有依赖,无传参=======================
你
没
有
输
入
任
何
内
容
======================运行有依赖,有传参====================
i
am
啊
中
国
人
[search@fsedump03sand LuceneDemo]$ 


第二种方式,仅仅在编译期间,引用了windows上的依赖jar,而并不需要,把windows上的一些jar打入jar包里,因为这些jar可能很大,例如hadoop的或hbase的,当然不引入,并不代表我们不需要,编译期仍然需要,参与编译,传到服务器上时,服务器已经有jar包了,所以不需要在windows上,上传上去,因为我们在linux上,使用cp命令,拷贝载入了需要依赖的jar所以才没报错,可以正常运行,如需在ant里调试,可以使用echo脚本进行打印显示。

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

相关推荐

    mac下ant打包android

    在Android应用开发中,构建和打包过程是必不可少的环节,特别是在多渠道发布时,需要针对不同的市场或平台生成定制的APK。...通过理解和配置Ant脚本,你可以有效地管理和自动化整个打包过程,提高开发效率。

    Ant 打包工程

    ### Ant打包过程 1. **编译**:首先,Ant会编译源代码。在上面的例子中,`javac`任务被用来编译`src`目录下的Java源文件到`build/classes`目录。 2. **创建JAR**:编译完成后,`jar`任务用于将编译后的类文件打包成...

    ant打包Web工程

    本篇将重点讲解如何使用Ant打包Web工程,以及涉及到的相关知识点。 首先,我们要理解Ant的核心概念。Ant是一个基于XML的构建工具,它的主要任务定义在名为`build.xml`的文件中。这个文件包含了构建过程的所有步骤,...

    ant 打包 java project 为ant

    标题中的“ant打包java project为jar”指的是使用Apache Ant工具将Java项目打包成JAR(Java Archive)文件的过程。Ant是Java开发中的一个构建工具,它以XML格式定义任务,可以自动化编译、测试、打包等流程。在这个...

    ant打包

    总结来说,"ant打包"是使用Apache Ant工具对Java项目进行编译、打包的过程,这通常涉及到编写XML格式的构建文件,定义一系列构建任务,并可能包含自定义规则来满足项目特有的需求。Ant作为一款源码级别的构建工具,...

    ant打包详细教程

    3. **创建JAR或WAR**:如果项目是Java应用,可以使用`jar`任务打包为JAR文件;如果是Web应用,则使用`war`任务打包为WAR文件。 4. **签名和验证**:对于发布版本,可能需要使用`jarsigner`任务对JAR进行签名,确保其...

    使用Ant打包 来调用properties 文件

    本文将深入探讨如何使用Ant来打包项目,并调用properties文件,以实现配置的动态管理。 Ant是基于XML的,它的主要任务定义在名为build.xml的文件中。这个文件描述了构建过程中的各个目标和任务,以及它们之间的依赖...

    ANT 打包命令

    本文将深入探讨“ANT打包命令”,一种基于Java的构建工具Apache Ant,以及如何利用它来管理和构建项目。 Apache Ant是一个开源的、跨平台的构建工具,它以XML格式定义构建文件,使得构建过程具有可读性强、可配置性...

    使用ANT打包J2EE程序

    ### 使用ANT打包J2EE程序 #### 概述 在Java世界中,特别是对于J2EE应用程序来说,构建过程往往需要高度自动化与可重复性。Apache Ant作为一种强大的、基于XML的构建工具,提供了灵活的方式来自动执行软件构建流程...

    ant编译java工程

    4. 如何使用Ant处理项目的其他构建步骤,如测试、打包和部署。 5. Ant在Java开发中的重要性,特别是在自动化构建流程中的应用。 6. 对源码管理和构建工具的理解。 了解并熟练掌握这些知识点,开发者可以有效地使用...

    Ant打包实例

    在上述的Ant打包实例中,我们可以看到Ant是如何帮助我们自动化项目构建的,包括源码的编译、测试、打包和部署。这极大地提高了开发效率,使得团队协作更加顺畅。通过阅读并实践这个实例,你可以更好地掌握Ant的使用...

    通过ant打包

    **Ant打包流程** Ant的核心在于它的build.xml文件,这是整个构建过程的配置文件。在这个文件中,你可以定义各种任务(tasks),包括编译源代码、创建JAR或WAR文件、复制资源文件等。下面是一般打包过程的关键步骤:...

    java安装程序,利用Ant构建打包工具

    Apache Ant是一个基于XML的构建工具,它允许开发者定义构建过程,包括编译、打包、测试等任务,使得整个过程可重复且易于管理。下面将详细阐述如何利用Ant构建打包工具,以及如何创建可视化的Java安装程序。 1. **...

    ant打包的案例

    本文将深入探讨“ant打包的案例”,基于提供的标签“源码”和“工具”,我们将聚焦于Apache Ant,一个广泛使用的Java项目构建工具。 Apache Ant是一种基于XML的工具,它定义了一组规则来构建、部署和管理Java项目。...

    Ant 打包demo

    本篇将详细讲解如何在Android项目中使用Ant进行打包操作。 首先,我们需要理解Ant的基本概念。Ant是Apache组织的一个项目,它使用XML来描述构建过程,包括编译、测试、打包等任务。在Android开发中,Ant主要用来...

    使用Ant将java工程打包成bat可执行性文件

    本文将深入探讨如何使用Ant将Java工程打包成bat可执行文件,并结合提供的`antBatTest`压缩包中的示例进行说明。 首先,我们需要了解Ant的基本概念。Ant是一个基于XML的构建工具,它的主要任务是编译、测试、打包和...

    java用ant打包

    当我们谈到“java用ant打包”时,通常指的是创建两种类型的可部署包:WAR(Web应用程序归档)和JAR(Java归档)文件。WAR文件用于部署Web应用程序,包含Servlets、JSPs和其他相关资源;JAR文件则用来封装Java类库,...

    ant 1.8.4 tar打包中文名不乱吗

    - 在`&lt;project&gt;`标签内设置`defaultencoding`属性为`UTF-8`,确保Ant在整个构建过程中使用统一的编码。 - 在`&lt;tar&gt;`任务中,如果tar命令支持指定编码,可以通过`encoding`属性设置为`UTF-8`,以确保tar文件内部的...

Global site tag (gtag.js) - Google Analytics