java基础jar包程序

合集下载

shell脚本运行java程序jar的方法

shell脚本运行java程序jar的方法

shell脚本运⾏java程序jar的⽅法在UBuntu上部署项⽬的时候,我们往往通过⼀段shell来启动程序,甚⾄是通过crontab定时任务来定时的调⽤java程序,但是很奇怪的⼀个问题就是,⽐如我写了⼀个如下的shell脚本:#!/bin/shexport mypath=/root/project/wishnomaljava -Xmx3000m -Xms3000m -server -d64 -Dfile.encoding=UTF-8 -Dfetch.threads=300 -classpath $mypath/:$mypath/wish2-assembly-1.0.0.jar newstandard.CrawlerNewStandard $* echo "END"⼿动命令⾏运⾏该脚本的时候,可以正常运⾏java程序,但是使⽤crontab定时任务,貌似就不起效果了分析可能原因:1)是否当前⽤户对此shell脚本没有可执⾏权限,通过ls -lrt /apps/service/mtk/checking/run.sh查看脚本是有可执⾏,但是有执⾏权限呀-rwxr-xr-x2)既然单独运⾏脚本没问题,那会不会是定时的问题呢?于是写了⼀个简单的输出的shell脚本通过定时也是没问题的。

说明还是脚本的问题。

后来上⽹查了下,想到可能是脚本中环境变量的原因,因为通过crontab运⾏脚本,是以root⽤户,⽽不是当前⽤户,于是cat /etc/profile查看环境变量,然后修改脚本如下:分析可能原因:1)是否当前⽤户对此shell脚本没有可执⾏权限,通过ls -lrt /apps/service/mtk/checking/run.sh查看脚本是有可执⾏,但是有执⾏权限呀-rwxr-xr-x2)既然单独运⾏脚本没问题,那会不会是定时的问题呢?于是写了⼀个简单的输出的shell脚本通过定时也是没问题的。

【Java】class.jar和sources.jar及javadoc.jar三种jar包

【Java】class.jar和sources.jar及javadoc.jar三种jar包

【Java】class.jar和sources.jar及javadoc.jar三种jar包⼀、普及jar包知识 例如(举例⼦解释)类⽂件(.class) test-java-1.0-SNAPSHOT.jar⽂档包(API) test-java-1.0-SNAPSHOT-javadoc.jar资源包(code) test-java-1.0-SNAPSHOT-sources.jar⼆、使⽤⽅法1.类⽂件(.class) test-java-1.0-SNAPSHOT.jar 反编译,最暴⼒直接的⽅法,将jar包拖进IDEA⾥查看2.⽂档包(API) test-java-1.0-SNAPSHOT-javadoc.jar 解压该⽂件,打开index.html查看3.资源包 test-java-1.0-SNAPSHOT-sources.jar 拖进IDEA直接查看⼆、⽣成⽅法1.类⽂件(.class) test-java-1.0-SNAPSHOT.jar 直接使⽤maven打包⽣成即可2.⽂档包(API) test-java-1.0-SNAPSHOT-javadoc.jar 使⽤ maven-javadoc-plugin 插件⽣成javadoc.jar3.资源包 test-java-1.0-SNAPSHOT-sources.jar 使⽤ maven-source-plugin 插件⽣成sources.jar完整pom⽂件如下:1<?xml version="1.0" encoding="UTF-8"?>2<project xmlns="/POM/4.0.0"3 xmlns:xsi="/2001/XMLSchema-instance"4 xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">5<modelVersion>4.0.0</modelVersion>67<groupId>com.test</groupId>8<artifactId>test-java</artifactId>9<version>1.0-SNAPSHOT</version>10<dependencies>11<dependency>12<groupId>junit</groupId>13<artifactId>junit</artifactId>14<version>4.12</version>15<scope>compile</scope>16</dependency>17</dependencies>1819<build>2021<plugins>22<plugin>23<!-- Maven 编译插件24指定maven编译的jdk版本,如果不指定,25 maven3默认⽤jdk 1.5 maven2默认⽤jdk1.3 -->26<groupId>org.apache.maven.plugins</groupId>27<artifactId>maven-compiler-plugin</artifactId>28<version>3.8.1</version>29<configuration>30<!-- ⼀般⽽⾔,target与source是保持⼀致的,但是,有时候为了让程序能在其他版本的jdk中运⾏(对于低版本⽬标jdk,源代码中不能使⽤低版本jdk中不⽀持的语法),会存在target不同于source的情况 --> 31<source>1.8</source><!-- 源代码使⽤的JDK版本 -->32<target>1.8</target><!-- 需要⽣成的⽬标class⽂件的编译版本 -->33<encoding>UTF-8</encoding><!-- 字符集编码 -->34<verbose>true</verbose>35<showWarnings>true</showWarnings>36<fork>true</fork><!-- 要使compilerVersion标签⽣效,还需要将fork设为true,⽤于明确表⽰编译版本配置的可⽤ -->37<executable><!-- path-to-javac --></executable><!-- 使⽤指定的javac命令,例如:<executable>${JAVA_1_4_HOME}/bin/javac</executable> -->38<compilerVersion>1.3</compilerVersion><!-- 指定插件将使⽤的编译器的版本 -->39<meminitial>128m</meminitial><!-- 编译器使⽤的初始内存 -->40<maxmem>512m</maxmem><!-- 编译器使⽤的最⼤内存 -->41<!-- <compilerArgument>-verbose -bootclasspath ${java.home}\lib\rt.jar</compilerArgument>&lt;!&ndash; 这个选项⽤来传递编译器⾃⾝不包含但是却⽀持的参数选项 &ndash;&gt;-->42</configuration>43</plugin>4445<!-- ⽣成javadoc⽂档包的插件 -->46<plugin>47<groupId>org.apache.maven.plugins</groupId>48<artifactId>maven-javadoc-plugin</artifactId>49<version>3.2.0</version>50<executions>51<execution>52<id>attach-javadocs</id>53<goals>54<goal>jar</goal>55</goals>56</execution>57</executions>58</plugin>5960<!-- ⽣成sources源码包的插件 -->61<plugin>62<groupId>org.apache.maven.plugins</groupId>63<artifactId>maven-source-plugin</artifactId>64<version>3.2.1</version>65<configuration>66<attach>true</attach>67</configuration>68<executions>69<execution>70<!-- 在package阶段之后会执⾏源代码打包 -->71<phase>package</phase>72<goals>73<goal>jar-no-fork</goal>74</goals>75</execution>76</executions>77</plugin>78</plugins>79</build>8081</project>配置好插件后,使⽤maven package命令既能在target⽬录中查看到三个jar包 命令:mvn package如果要把三种jar包安装到本地仓库 命令:mvn install如果要把三种jar包发布到远程仓库 命令:mvn deploy。

java开发常用jar包

java开发常用jar包

java开发常用jar包mail.jar与activation.jar里面包含了activation.jar和mail.jar两个包.通过里面的类的调用便可以达到发送电子邮件的目的commons-beanutils.jarApache Commons包中的一个,包含了一些Bean工具类类。

必须使用的jar包。

commons-collections.jarApache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大commons-lang.jarApache Commons包中的一个,包含了一些数据类型工具类,是ng.*的扩展。

必须使用的jar包。

commons-logging.jar:Apache Commons包中的一个,包含日志功能commons-io.jarApache Commons包中的一个,java.io.*的扩展,输入输出,支持文件上传commons-fileupload.jarApache Commons包中的一个,是一个通过Http接收上传的文件并处理结果文件的库dom4j-1.4.jar 和jaxen-1.1.1.jar是一个Java的XML API,类似于jdom,用来读写XML文件的。

Hibernate使用dom4j解析XML配置文件和XML映射元文件。

必需的。

ehcache-1.2.jarHibernate可以使用不同cache缓存工具作为二级缓存。

EHCache是缺省的cache缓存工具。

如果没有其它的可选缓存工具,则为必需的。

hibernate3.jarhibernate3的核心类库。

itext.jar是用于生成PDF文档的一个java类库。

通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。

iTextAsian.jaritext中关于亚洲编码的类库,在这里用于中文字体的输入。

java打jar包的几种方式详解

java打jar包的几种方式详解

java打jar包的⼏种⽅式详解⼀、制作只含有字节码⽂件的jar包我们先来看只含有字节码⽂件,即只含有class⽂件的jar包怎么制作,这是最简单的形式1、最简单的jar包——直接输出hello最终⽣成的jar包结构META-INFHello.class⽅法步骤(1)⽤记事本写⼀个Hello.java的⽂件class Hello{public static void main(String[] agrs){System.out.println("hello");}}(2)⽤命令⾏进⼊到该⽬录下,编译这个⽂件 javac Hello.java(3)将编译后的Hello.class⽂件打成jar包 jar -cvf hello.jar Hello.class c表⽰要创建⼀个新的jar包,v表⽰创建的过程中在控制台输出创建过程的⼀些信息,f表⽰给⽣成的jar包命名(4)运⾏jar包 java -jar hello.jar 这时会报如下错误 hello.jar中没有主清单属性 添加Main-Class属性 ⽤压缩软件打开hello.jar,会发现⾥⾯多了⼀个META-INF⽂件夹,⾥⾯有⼀个MENIFEST.MF的⽂件,⽤记事本打开Manifest-Version: 1.0Created-By: 1.8.0_121 (Oracle Corporation) 在第三⾏的位置写⼊ Main-Class: Hello (注意冒号后⾯有⼀个空格,整个⽂件最后有⼀⾏空⾏),保存 再次运⾏ java -jar hello.jar ,此时成功在控制台看到 hello ,成功2、含有两个类的jar包——通过调⽤输出hello最终⽣成的jar包结构META-INFTom.classHello.class⽅法步骤(1)⽤记事本写⼀个Hello.java和⼀个Tom.java的⽂件 ⽬的是让Hello调⽤Tom的speak⽅法class Hello{public static void main(String[] agrs){Tom.speak();}}class Tom{public static void speak(){System.out.println("hello");}}(2)编译: javac Hello.java 此时Hello.java和Tom.java同时被编译,因为Hello中调⽤了Tom,在编译Hello的过程中发现还需要编译Tom(3)打jar包,这次我们换⼀种⽅式直接定义Main-Class。

-jar命令用法-概述说明以及解释

-jar命令用法-概述说明以及解释

-jar命令用法-概述说明以及解释1.引言1.1 概述在Java开发中,-jar命令是一个经常使用的命令,用于执行打包为jar 文件的Java应用程序。

它为我们提供了一种方便的方式来启动和运行独立的Java应用程序,无需考虑类路径的问题。

使用-jar命令时,我们只需要提供jar文件的路径作为参数,Java虚拟机(JVM)会自动搜索并加载jar文件中的主类作为应用程序的入口点。

这使得我们可以将整个应用程序打包到一个jar文件中,方便部署和发布。

与传统的java命令相比,-jar命令有一些独特的特性。

首先,它会忽略类路径(即不会加载classpath中的类),而是只加载jar文件中的类。

这使得我们可以确保应用程序只使用了我们想要的类,而不会引入其他不必要的类或版本冲突。

其次,-jar命令还可以让我们在jar文件中指定一个清单文件(manifest),其中可以包含额外的元数据和配置信息。

通过这种方式,我们可以在运行应用程序时传递一些参数或配置信息,而不必在命令行中逐个指定。

另外,-jar命令还能够处理一些常见的问题,比如自动解压缩jar文件、加载外部依赖库等。

这些功能使得我们可以更加方便地打包和分发我们的应用程序,减少了很多繁琐的配置和部署步骤。

总之,-jar命令是Java开发中一个非常有用的工具,它简化了应用程序的启动和部署过程,提高了开发效率。

在本文的接下来部分,我们将详细介绍如何正确地使用-jar命令,以及一些常见问题的解决方法。

1.2 文章结构文章结构部分的内容:文章结构是指文章的整体框架和组织方式,它对于读者来说具有重要的指导作用。

本文将按照以下结构展开介绍-jar命令的用法。

首先,文章将引言部分,对本文的主题进行概述。

我们将介绍-jar命令在Java开发中的重要性以及它的基本功能和作用。

同时,我们还会介绍本文的文章结构和目的,以便读者可以清晰地了解本文的内容和目标。

接下来,正文部分将涵盖两个要点。

jar包介绍大全用途作用详解java

jar包介绍大全用途作用详解java

jta.jar 标准JTA API必要commons-collections.jar 集合类 必要antlr.jar ANother Tool for Language Recognition 必要asm.jar ASM字节码库 如果使用“cglib” 则必要asm-attrs.jar ASM字节码库 如果使用“cglib” 则必要ehcache.jar EHCache缓存 如果没有其他的缓存,则是必要的cglib.jar CGLIB字节码解释器 如果使用“cglib” 则必要commons-beanutils.jar 提供对java反射和自省API的包装 对bean操作的类,可以访问类的属性及get和set方法commons-digester.jar Digester基于规则的XML文档解析,主要用于XML到java对象的映射commons-lang.jar 包含了一些数据类型工具类,是ng.* 的扩展 必须使用的包commons-pool.jar,commons-dbcp.jar DBCP数据库连接池,Apache的Jakarta组织开发的,Tomcat4的连接池也是DBCPcommons-chain.jar Jakarta Commons的子项目Chain将上述两个模式组合成一个可复用的Java框架用于描述顺序的处理流程 strutsheShale应用框架作为处理HTTP请求处理的基础机制commons-validator.jar 用来帮助进行验证的工具。

比如验证Email字符串,日期字符串等是否合法。

Burlap.jar 支持ejb,远程调用Remoting方面的类buffalo.jar 处理xml的jar包commons-betwixt.jar 用xml生成报表时需要用到的包commons-el.jar Apache 组织中一个用来解析 JSP 2.0 的表达式语言的 Javahtmlparser.jar 是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html类库jakarta-oro.jar java正则表达式所需的包jaxen.jar 在jdom中使用xpath需要导入jaxen.jar包mina-core.jar Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架这里主要介绍的是Hibernate使用到的.jarHibernate一共包括了23个jar包,令人眼花缭乱。

java-jar命令运行jar包时指定外部依赖jar包

java-jar命令运行jar包时指定外部依赖jar包

java-jar命令运⾏jar包时指定外部依赖jar包你们都知道⼀个java应⽤项⽬能够打包成⼀个jar,固然你必须指定⼀个拥有main函数的main class做为你这个jar包的程序⼊⼝。

具体的⽅法是修改jar包内⽬录META-INF下的MANIFEST.MF⽂件。

好⽐有个叫作test.jar的jar包,⾥⾯有⼀个拥有main函数的main class:test.someClassName。

咱们就只要在MANIFEST.MF⾥⾯添加以下⼀句话:htmlMain-Class: test.someClassName⽽后咱们能够在控制台⾥输⼊java -jar test.jar便可以运⾏这个jar。

可是咱们这个项⽬须要引⽤其余第三⽅的jar包,在eclipse⾥⾯以项⽬jar包的形式引⽤了这个叫作some.jar的包,当时放在项⽬的lib⼦⽬录下,最后项⽬打包时把这个some.jar也打进来了,可是⽤java -jar执⾏这个test.jar的时候报找不到Class异常,缘由就是jar引⽤不到放在本⾝内部的jar包。

那怎么办?运⾏时将其加⼊classpath的⽅式⾏不⾏?就是在运⾏jar的同时加⼊classpath参数:javajava -classpath some.jar -jar test.jar这种⽅式是不⾏的,由于使⽤classpath指定的jar是由AppClassloader来加载,java命令加了-jar 参数之后,AppClassloader就只关注test.jar范围内的class了,classpath参数失效。

那该怎么引⽤其余的jar包呢?linux⽅法1、使⽤Bootstrap Classloader来加载这些类算法咱们能够在运⾏时使⽤以下参数:sql-Xbootclasspath:彻底取代系统Java classpath.最好不⽤。

-Xbootclasspath/a: 在系统class加载后加载。

命令行下编译java并生成jar包(1)

命令行下编译java并生成jar包(1)

命令行下编译java并生成jar包jar文件听说过吗,没有?或者陌生!好,没关系,这就是我们的第一站:打包发布。

为什么会有这个玩意呢,首先,这是jar的全称:JavaTM Archive (JAR) file,是的,就是java 存档文件。

这有点类似zip文件,想一想它是干什么的用的呢,压缩!?没错就是要压缩,将我们原先零散的东西放到一下,重新组织,所有这些目的只有一个:方便!好了,不用管他是怎么压缩的,我们的重点是哪些是我们要压缩的(输入),还有压缩成了什么(输出),进而将它发布(部署)。

那我们的输入(要压缩的东西)主要是class文件,还有辅助的资源(这其中可能有图片,jsp文件,html文件等等)。

Jar技术在jdk1.1版本中就已存在,在1.2中又有了增强。

接下来说说jar的好处吧,这是官方的描述:安全,快速下载,压缩,猎取包,版本化包,可携。

说了这么多,我们现在开始实施。

先打开命令提示符(win2000或在运行筐里执行cmd命令,win98为DOS提示符),输入jar –help,然后回车(如果你盘上已经有了jdk1.1或以上版本),看到什么:用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目录] 文件名…选项:-c 创建新的存档-t 列出存档内容的列表-x 展开存档中的命名的(或所有的〕文件-u 更新已存在的存档-v 生成详细输出到标准输出上-f 指定存档文件名-m 包含来自标明文件的标明信息-0 只存储方式;未用ZIP压缩格式-M 不产生所有项的清单(manifest〕文件-i 为指定的jar文件产生索引信息-C 改变到指定的目录,并且包含下列文件:如果一个文件名是一个目录,它将被递归处理。

清单(manifest〕文件名和存档文件名都需要被指定,按‘m‘ 和‗f‘标志指定的相同顺序。

示例1:将两个class文件存档到一个名为‗classes.jar‘ 的存档文件中:jar cvf classes.jar Foo.class Bar.class示例2:用一个存在的清单(manifest)文件‗mymanifest‘ 将foo/ 目录下的所有文件存档到一个名为‗classes.jar‘ 的存档文件中:jar cvfm classes.jar mymanifest -C foo/ .来个小例子试试看:我们只有一个HelloWorld,如下:public class HelloWorld{public static void main(String[] args){System.out.println(―Hi, Hello World!‖);}}我将这个java文件存到C盘跟目录下,ok,接下来,在先前打开的命令提示符下(跳转到C盘提示符下),我们输入javac HelloWorld.java,然后继续输入:jar cvf hello.jar HelloWorld.class,回车后去你的C盘看看,多了什么,没错hello.jar 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
System.out.println("请输入密码:");
String password = scanner.next();
}else if(option.equals("B")){
}
}
}
}
package myutil;
public class MyArrays
{
public static String toString(int[] arr){
分析:
1.确定新数组的长度。原数组的长度-重复元素个数
*/
import java.util.*;
class Demo12 {
public static void main(String[] args)
{
int[] arr = {11,2, 4, 2, 10, 11};
arr = clearRepeat(arr);
模板模式的步骤:
1.先写出解决该类事情其中的一件的解决方案。
2.分析代码,把会发生变化的代码抽取出来独立成一个方法。把该方法描述成一个抽象的方法。
3.使用final修饰模板方法,防止别人重写你的模板方法。
*/
abstract class MyRuntime{
public final void getTime(){
public class Demo3
{
/*
static{
System.out.println("这个是Dmeo3的静态代码块...");
}
*/
public void print(){
System.out.println("这个是Dmeo3的print方法...");
}
}
package bb;
import aa.Demo3;
/*
包:
java中的包就相当于windows文件夹。
包的作用:
1.解决类名重复产生冲突的问题。
2.便于软件版本的发布。
定义包的格式:
package包名;
包名命名规范:包名全部小写。
包语句要注意的事项:
1. package语句必须位于java文件中中第一个语句。
2.如果一个类加上了包语句,那么该类的完整类名就是:包名.类名
不同包true false false false
注意:在不同包下面只有public与protected可以访问,而且protected必须是在继承关系下才能够访问。
*/
package aa;
public class Demo7
{
protected int i =10;
}
package bb;
import aa.Demo7;
3.一个java文件只能有一个包语句。
问题:每次编译的时候都需要自己创建一个文件夹,把对应的class文件存储到文件夹中。烦!!!
javac -d指定类文件的存放路径java源文件
*/
package aa;
class Demo1
{
public static void main(String[] args)
String userName;
String password;
}
class Demo13
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
User[] users = new User[10];
}
public abstract void code();
}
class Demo11 extends MyRuntime
{
public static void main(String[] args)
{
Demo11 d = new Demo11();
d.getTime();
}
//code方法内部就写要计算运行时间的代码;
打jar包要注意的事项:
1.一个程序打完了jar之后必须要在清单文件上指定入口类:格式Main-Class:包名.类名
2. jar包双击运行仅对于图形化界面的程序起作用,对控制台的程序不起作用。
jar文件的作用:
1.方便用户快速运行一个项目。
2.提供工具类以jar包的形式给别人使用。
如果使用jar包里面的类必须要先设置classpath路径。
String result = "";
for(int i = 0 ; i < arr.length ; i++){
if(i==0){
result +="["+ arr[i]+",";
}else if(i==arr.length-1){
result += arr[i]+"]";
}else{
result += arr[i]+",";
d.print();
/*
Demo5 d2 = new Demo5();
d2.test();
*/
}
}
package aa;
public class Demo5
{
static{
System.out.println("这个是Dmeo5的静态代码块...");
}
public void test(){
System.out.println("这个是Demo5的test方法...");
long startTime = System.currentTimeMillis();//记录开始的时间
code();
long endTime = System.currentTimeMillis(); //记录结束的时间.
System.out.println("运行时间:"+ (endTime-startTime));
for(int j = i+1 ; j<arr.length ; j++){
if(arr[i]==arr[j]){
count++;
break;
}
}
}
//新数组的长度
int newLength = arr.length - count;
//创建一个新的数组
int[] newArr = new int[newLength];
}
}
return result;
}
}
{
System.out.println("这个是Demo1的main方法...");
}
}
package bb;
class Demo1
{
public static void main(String[] args)
{
System.out.println("这个是Demo2main方法..");
}
}
/*
有了包之后类与类之间的访问:
{
int[] arr = {5,1,3,6};
System.out.println(MyArrays.toString(arr));
}
}
/*
模板模式:解决某类事情的步骤有些是固定的,有些是会发生变化的,那么这时候我们可以
为这类事情提供一个模板代码,从而提高效率。
需求;编写一个计算程序运行时间的模板。
System.out.println("清除重复元素的数组:"+ Arrays.toString(arr));
}
public static int[] clearRepeat(int[] arr){
//先计算出重复元素的格式:
int count = 0; //记录重复元素的个数
for(int i = 0 ; i < arr.length-1 ; i++){
int index = 0 ;//新数组的索引值
//遍历旧数组
for(int i = 0 ; i< arr.length ; i++){
int temp = arr[i]; //旧数组中的元素
boolean flag = false; //默认不是重复元素
//拿着旧数组的元素与新数组的每个元素比较一次。
}
}
/*
权限修饰符:权限修饰符就是控制被修饰的成员的范围可见性。
public(公共) protected(受保护) default(缺省) private (大到小)
同一个类true true true true
同一个包true true true false
子父类true true false false
frame.setSize(400,500);
frame.setVisible(true); //设置窗口可见。
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
import myutil.MyArrays;
class Demo10
{
public static void main(String[] args)
class Demo8
{
public static void main(String[] args)
{
Demo7 d = new Demo7();
System.out.println("i="+d.i);
相关文档
最新文档