- 浏览: 2184216 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
Maven的出现,使得项目管理,更加方便,快捷,但并不意味着Ant就从此消失了,现在很多的Apache的项目,依旧提供了Ant编译的方式,有的既提供了Ant的编译方式,也提供了Maven的编译方式,他们的优劣,散仙在这里就不加以讨论了,因为这种话题没什么具体的意义,合适的项目就选择合适的构建工具即可!
1,我们先看下,使用ant打包整个项目,并运行的例子:散仙的例子里,使用的jar包有lucene的,也有jdk自带的,所以打包整个项目,并使用java -cp xx.jar ,项目的主要两个测试类如下:
当前的结构路径,如下:
注意,lucene依赖的jar包,在build.xml里有依赖拷贝,下面看下build.xml里面的内容:、
然后在对应的同级目录下提供lib目录,放入依赖的jar包即可
第二种方式,编译时候在windows上,引入需要依赖的jar,但并不把依赖的jar包打入lib目录下,然后再linux上,使用cp命令,把依赖的jar包拷贝入:
linux下的目录
执行脚本如下:
运行结果如下:
第二种方式,仅仅在编译期间,引用了windows上的依赖jar,而并不需要,把windows上的一些jar打入jar包里,因为这些jar可能很大,例如hadoop的或hbase的,当然不引入,并不代表我们不需要,编译期仍然需要,参与编译,传到服务器上时,服务器已经有jar包了,所以不需要在windows上,上传上去,因为我们在linux上,使用cp命令,拷贝载入了需要依赖的jar所以才没报错,可以正常运行,如需在ant里调试,可以使用echo脚本进行打印显示。
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脚本进行打印显示。
发表评论
-
记一次log4j不打印日志的踩坑记
2019-09-22 01:58 1566### 起因 前几天一个跑有java应用的生产集群(200多 ... -
在Java里面如何解决进退两难的jar包冲突问题?
2019-07-23 19:10 1231如上图所示: es api组件依赖guava18.0 ... -
如何轻松理解二叉树的深度遍历策略
2019-07-03 23:33 1125我们知道普通的线性数据结构如链表,数组等,遍历方式单一 ... -
为什么单线程Redis性能也很出色
2019-01-21 18:02 2205高性能的服务器,不一 ... -
如何将编程语言里面的字符串转成数字?
2019-01-11 23:23 2091将字符串转成数字在很 ... -
为什么Java里面String类是不可变的
2019-01-06 18:36 1667在Java里面String类型是不可变对象,这一点毫无疑问,那 ... -
关于Java里面volatile关键字的重排序
2019-01-04 18:49 1066Java里面volatile关键字主 ... -
多个线程如何轮流打印ABC特定的次数?
2018-12-11 20:42 6041之前的一篇文章,我给 ... -
聊聊Java里面的引用传递
2018-11-16 21:21 988长久以来,在Java语言里面一直有一个争论,就是Java语言到 ... -
理解计数排序算法的原理和实现
2018-10-11 10:03 2091计数排序(Counting sort) ... -
理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
2018-09-06 11:31 3388### 前言 理解HashMap和Con ... -
关于Java里面多线程同步的一些知识
2018-07-18 09:45 1107# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
Java单例模式之双检锁深入思考
2018-07-08 12:25 3289# Java单例模式之双检锁 ... -
关于Java里面多线程同步的一些知识
2018-07-08 12:23 1120# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
重新认识同步与异步,阻塞和非阻塞的概念
2018-07-06 14:30 1473# 重新认识同步与异步 ... -
线程的基本知识总结
2018-06-27 16:27 1060### (一)创建线程的方式 (1)实现Runnable接口 ... -
Java里面volatile关键字修饰引用变量的陷阱
2018-06-25 11:42 1386# Java里面volatile关键字修饰引用变量的陷阱 如 ... -
关于Java里面的字符串拼接,你了解多少?
2018-06-25 11:28 1367# 关于Java里面的字符串 ... -
深入理解Java内存模型的语义
2018-06-25 11:39 739### 前言 Java内存模型( ... -
如何证明Java多线程中的成员变量数据是互不可见的
2018-06-21 10:09 1501前面的几篇文章主要介绍了Java的内存模型,进程和线程的定义, ...
相关推荐
在Android应用开发中,构建和打包过程是必不可少的环节,特别是在多渠道发布时,需要针对不同的市场或平台生成定制的APK。...通过理解和配置Ant脚本,你可以有效地管理和自动化整个打包过程,提高开发效率。
### Ant打包过程 1. **编译**:首先,Ant会编译源代码。在上面的例子中,`javac`任务被用来编译`src`目录下的Java源文件到`build/classes`目录。 2. **创建JAR**:编译完成后,`jar`任务用于将编译后的类文件打包成...
本篇将重点讲解如何使用Ant打包Web工程,以及涉及到的相关知识点。 首先,我们要理解Ant的核心概念。Ant是一个基于XML的构建工具,它的主要任务定义在名为`build.xml`的文件中。这个文件包含了构建过程的所有步骤,...
标题中的“ant打包java project为jar”指的是使用Apache Ant工具将Java项目打包成JAR(Java Archive)文件的过程。Ant是Java开发中的一个构建工具,它以XML格式定义任务,可以自动化编译、测试、打包等流程。在这个...
总结来说,"ant打包"是使用Apache Ant工具对Java项目进行编译、打包的过程,这通常涉及到编写XML格式的构建文件,定义一系列构建任务,并可能包含自定义规则来满足项目特有的需求。Ant作为一款源码级别的构建工具,...
3. **创建JAR或WAR**:如果项目是Java应用,可以使用`jar`任务打包为JAR文件;如果是Web应用,则使用`war`任务打包为WAR文件。 4. **签名和验证**:对于发布版本,可能需要使用`jarsigner`任务对JAR进行签名,确保其...
本文将深入探讨如何使用Ant来打包项目,并调用properties文件,以实现配置的动态管理。 Ant是基于XML的,它的主要任务定义在名为build.xml的文件中。这个文件描述了构建过程中的各个目标和任务,以及它们之间的依赖...
本文将深入探讨“ANT打包命令”,一种基于Java的构建工具Apache Ant,以及如何利用它来管理和构建项目。 Apache Ant是一个开源的、跨平台的构建工具,它以XML格式定义构建文件,使得构建过程具有可读性强、可配置性...
### 使用ANT打包J2EE程序 #### 概述 在Java世界中,特别是对于J2EE应用程序来说,构建过程往往需要高度自动化与可重复性。Apache Ant作为一种强大的、基于XML的构建工具,提供了灵活的方式来自动执行软件构建流程...
4. 如何使用Ant处理项目的其他构建步骤,如测试、打包和部署。 5. Ant在Java开发中的重要性,特别是在自动化构建流程中的应用。 6. 对源码管理和构建工具的理解。 了解并熟练掌握这些知识点,开发者可以有效地使用...
在上述的Ant打包实例中,我们可以看到Ant是如何帮助我们自动化项目构建的,包括源码的编译、测试、打包和部署。这极大地提高了开发效率,使得团队协作更加顺畅。通过阅读并实践这个实例,你可以更好地掌握Ant的使用...
**Ant打包流程** Ant的核心在于它的build.xml文件,这是整个构建过程的配置文件。在这个文件中,你可以定义各种任务(tasks),包括编译源代码、创建JAR或WAR文件、复制资源文件等。下面是一般打包过程的关键步骤:...
Apache Ant是一个基于XML的构建工具,它允许开发者定义构建过程,包括编译、打包、测试等任务,使得整个过程可重复且易于管理。下面将详细阐述如何利用Ant构建打包工具,以及如何创建可视化的Java安装程序。 1. **...
本文将深入探讨“ant打包的案例”,基于提供的标签“源码”和“工具”,我们将聚焦于Apache Ant,一个广泛使用的Java项目构建工具。 Apache Ant是一种基于XML的工具,它定义了一组规则来构建、部署和管理Java项目。...
本篇将详细讲解如何在Android项目中使用Ant进行打包操作。 首先,我们需要理解Ant的基本概念。Ant是Apache组织的一个项目,它使用XML来描述构建过程,包括编译、测试、打包等任务。在Android开发中,Ant主要用来...
本文将深入探讨如何使用Ant将Java工程打包成bat可执行文件,并结合提供的`antBatTest`压缩包中的示例进行说明。 首先,我们需要了解Ant的基本概念。Ant是一个基于XML的构建工具,它的主要任务是编译、测试、打包和...
当我们谈到“java用ant打包”时,通常指的是创建两种类型的可部署包:WAR(Web应用程序归档)和JAR(Java归档)文件。WAR文件用于部署Web应用程序,包含Servlets、JSPs和其他相关资源;JAR文件则用来封装Java类库,...
- 在`<project>`标签内设置`defaultencoding`属性为`UTF-8`,确保Ant在整个构建过程中使用统一的编码。 - 在`<tar>`任务中,如果tar命令支持指定编码,可以通过`encoding`属性设置为`UTF-8`,以确保tar文件内部的...