文档章节

java命令行执行带依赖jar包的main函数

山哥
 山哥
发布于 2016/04/13 09:37
字数 513
阅读 5183
收藏 6
点赞 1
评论 0

# 在Linux下面ClassPath前面是一个点号加一个冒号; 在Windows下面ClassPath前面是一个点号加一个分号

Linux: java -Dfile.encoding=utf8 -cp .:./lib/commons-lang-2.6.jar:./lib/log4j-1.2.15.jar Mytest

Windows:java -Dfile.encoding=gbk -cp .;./lib/commons-lang-2.6.jar;./lib/log4j-1.2.15.jar Mytest


# 由于 -cp 参数不能用通配符,当依赖 jar 文件都在同一目录,可通过 -Djava.ext.dirs 指定目录。

# 注意: java中系统属性java.ext.dirs指定的目录由ExtClassLoader加载器加载,如果您的程序没有指定该系统属性(-Djava.ext.dirs=sss/lib)那么该加载器默认加载$JAVA_HOME/lib/ext目录下的所有jar文件。但如果你手动指定系统属性且忘了把 $JAVA_HOME/lib/ext 路径给加上,那么ExtClassLoader不会去加载$JAVA_HOME/lib/ext下面的jar文件,这意味着你将失去一些功能,例如java自带的加解密算法实现。

java -Djava.ext.dirs=lib Mytest


# 如果在MANIFEST.MF里配置了Main-Class,可以直接执行jar文件

java -jar xxx.jar


# 如果程序中需要解析在  classpath 下的一些配置文件,则可以将这些配置文件放到一个目录下,并使用 -classpath 指定

java -Djava.ext.dirs=lib -classpath conf  com.test.MyTest


-------------------------------------------------------------------------------------------------------------------------------------

总结下(在Linux环境下):

1. 如果所有 jar 包都在 lib 目录下,配置文件在 conf 目录下:

java  -Dfile.encoding=utf8  -Djava.ext.dirs=./lib  -classpath  ./conf   com.test.MyTest


2. 如果所有依赖 jar 包在 lib 目录下,但是 主程序 jar 包在别的目录下,则要结合 -cp;此时就不能使用 -classpath conf 来指定配置文件目录了,必须要放到 -cp 下,将 conf 目录和 主程序 jar 连接在一起:

java  -Dfile.encoding=utf8  -Djava.ext.dirs=./lib  -cp ./conf:./test.jar   com.test.MyTest


3. 不使用 -Djava.ext.dirs ,仍然使用 -cp,则使用程序循环 jar 包拼接路径:

app_path=.
jars_path=$app_path/lib
conf_path=$app/conf

jars=`find $jars_path -name "*.jar"`

cp_env=$conf_path

for jar in jars
do
    cp_env=$cp_env:$jar
done

# 如果Main方法所在的主 jar 包,不在 lib 目录下,则需要再把主 jar 包也接入 cn_env
# cp_env=$cp_env:$app_path/test.jar

exec java -Dfile.encoding=utf8 -cp "$cp_env"  com.test.MyTest

-------------------------------------------------------------------------------------------------------------------------------------


本文转载自:

共有 人打赏支持
山哥

山哥

粉丝 242
博文 350
码字总数 136465
作品 0
南京
程序员
使用Maven运行Java main的方法(转)

使用Maven运行Java Main的方法(既Java Application项目),可以有如下方式解决: 1、将Maven项目导入到eclipse中,然后直接项目右键【Run As】->【Java Application】。 2、直接指定jar包的...

easonjim
2017/05/09
0
0
使用lein和Intellij IDEA12建立cljure项目

----------------版本旧了,各位新手绕道吧--------------- 最近看了paul大神的黑客与画家.于是想学lisp.不过因为出身java.于是找了同为jvm系的clojure作为lisp旅程的第一步.无奈国内新手引导...

架构梦想
2013/12/22
0
0
JAVA基础知识之编译、运行、打包

一:java环境设置 在环境变量中设置以下三个变量: JAVAHOME=C:j2sdk1.4.1 //可以改为相应的目录 CLASSPATH=%JAVAHOME%libtools.jar;%JAVAHOME%libdt.jar PATH=%JAVAHOME%bin;%PATH% 然后在命...

luminji
2015/06/03
0
0
开发第一个spring boot应用

我们来用spring boot开发一个简单的“hello world”web应用,使用maven构建。开始之前,先检查你的java与maven的版本,看是否是spring boot1.3支持的版本: $ java -versionjava version "1...

柳哥
2015/05/17
0
3
浅谈 java 中构建可执行 jar 包的几种方式

有时候,由于项目的需要,我们会将源码编译后以工具包(class打成jar包)的形式对外提供,此时, 你的 jar 包不一定要是可执行的,只要能通过编译,能被别人以 import 的方式调用就行了。但还...

大数据之路
2013/05/05
0
3
Exec Maven Plugin全面解析和使用示例

1.为什么使用exec? 现在的工程往往依赖众多的jar包,不像war包工程,对于那些打包成jar包形式的本地java应用来说,通过java命令启动将会是一件极为繁琐的事情,原因很简单,太多的依赖让参数...

劲风online
2015/03/31
0
0
【转】maven3常用命令、java项目搭建、web项目搭建详细图解

------------------------------maven3常用命令--------------------------- 1、常用命令 1)创建一个Project mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -D......

王小明123
2014/05/17
0
0
maven---使用maven创建项目

maven简介:maven是apache一个项目管理工具,最大的优点就是可以轻松管理项目依赖,只要手动配置就能添加删除依赖,在使用框架或者其他jar包的工程中非常有用 maven使用: maven使用纯JAVA开...

shadowalker1990
2014/02/25
0
0
Instrumentation 实践详解

利用 Java 代码,即 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,有了这样的功能,开发者就可以实现更为灵活的和 了,这样的特性实际上提供了,使得开发者无需对 ...

陶邦仁
2014/12/30
0
0
Ubuntu下JDK7安装全过程并调试第一个带包的java程序

Ubuntu下JDK7安装全过程并调试第一个带包的java程序 第一步:下载jdk-7-linux-i586.tar.gz 第二步:解压安装 cd /usr/lib sudo mkdir jvm cd {你的目录jdk压缩文件目录} sudo tar zxvf jdk-7...

Van_chan
2013/05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
10分钟前
0
0
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
22分钟前
0
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
27分钟前
0
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
42分钟前
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
49分钟前
0
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
57分钟前
0
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
58分钟前
0
0
安装tensorflow-XXX报错

报错: tensorflow-0.5.0-cp27-none-linux_x86_64.whl is not a supported wheel on this platform. 解决: wget https://bootstrap.pypa.io/get-pip.py sudo python2.7 get-pip.py sudo p......

Yao--靠自己
今天
0
0
JVM学习手册(一):JVM模型

一直从事JAVA开发,天天和JVM打交道,仔细想想对JVM还真的不是特别了解,实在是不应该.周六看了许多资料,也算有点心得,记录一下。 JVM内存模型分为5个区域:方法区,堆,虚拟机栈,本地方法栈,程序计...

勤奋的蚂蚁
今天
0
0
转行零基础该如何学Python?这些一定要明白!

转行零基础学Python编程开发难度大吗?从哪学起?近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大?今天,小编就来为大家详细解读一下这个问题。...

猫咪编程
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部