包含dashjava的词条

博主:adminadmin 2023-01-12 05:24:13 1101

本篇文章给大家谈谈dashjava,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何把java 应用 制作成docker镜像

利用Dockerfile构建一个简单的java应用镜像,依赖环境比较简单,JDK,定制化的Tomcat(名为star-appserver)

1、环境准备

ubuntu:14.04

docker : 1.4

jdk:jdk-8u31-linux-x64.gz

tomcat : 7.0(star-appserver)

在/usr/local下创建目录:sms,将jdk-8u31-linux-x64.gz和star-appserver(此处为了简单,已包含应用)拷贝到此目录下,由于Docker在构建镜像时,需将Dockerfile所在目录传给Docker daemon作为构建上下文,所以此目录下应包含构建时所依赖的各种环境。

2、环境准备好后,在sms下创建Dockerfile(名字必须为Dockerfile)文件,内容如下

FROM ubuntu:latest

MAINTAINER zhangjy

#install JDK and TOMCAT

ADD jdk-8u31-linux-x64.gz /usr/local/

ADD tomcat /usr/local/ #tomcat下为star-appserver,如果直接复制star-appserver,只会复制目录里边的内容,不会复制目录本身

ADD timezone /etc/

#启动脚本,用于从镜像启动容器时调用执行,见下面的ENTRYPOINT

ADD onStart.sh /usr/local/

ENV JAVA_HOME=/usr/local/jdk1.8.0_31 CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$PATH:$JAVA_HOME/bin

RUN echo "JAVA_HOME=/usr/local/jdk1.8.0_31\nCALSSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar\nPATH=$PATH:$JAVA_HOME/bin" /etc/profile

#start tomcat

ENTRYPOINT ["/usr/local/onStart.sh"]

3、在sms下创建onStart.sh,并赋予执行权限,用于启动tomcat并输出日志(为了保证容器中有执行状态的进程,否则容器停止)

#!/bin/bash

/usr/local/star-appserver/bin/startup.sh

tail -f /usr/local/star-appserver/logs/stariboss.log

4、在sms下执行命令,创建成功

$docker build -t zhangjy/starsms:v1 .

启动时,发现应用访问数据库报错:ORA-01882: timezone region not found,原因是JVM默认使用Ubuntu的/etc/timezone里配置的时区,查看timezone时区为Etc/UTC,再查看ORACLE数据库支持的时区:select * from V$TIMEZONE_NAMES发现没有,于是又在sms目录下创建了一个timezone文件,将时区配置成Asia/Shanghai,在Dockerfile中加入到镜像/etc/目录下

Dockerfile文件配置说明:

FROM

表明基于哪个镜像创建

MAINTAINER

作者和邮箱

ADD

将目录或文件加入到镜像的某个目录,格式是ADD 源文件 目标目录

RUN

有两种格式:

RUN command (the command is run in a shell - /bin/sh -c - shell form)

RUN ["executable", "param1", "param2"] (exec form)

默认RUN后的命令是在/bin/sh下执行,像Ubuntu默认/bin/sh是指向/bin/dash,如果想使用/bin/bash,则可按如下方式

RUN ["/bin/bash","-c","source /etc/profile"]

但需注意,这种方式不能解析类似于$HOME的参数引用

ENV

设置环境变量,在镜像构建过程中和容器启动后均有效

CMD

CMD在容器运行的时候提供一些命令及参数,用法如下:

CMD ["executable","param1","param2"] (exec form, this is the preferred form) CMD ["param1","param2"] (as default parameters to ENTRYPOINT) CMD command param1 param2 (shell form)

- 第一种用法:运行一个可执行的文件并提供参数。

- 第二种用法:为ENTRYPOINT指定参数,即为ENTRYPOINT指定命令的默认参数,通过docker run命令传过来的参数会将其覆盖

- 第三种用法(shell form):是以”/bin/sh -c”的方法执行的命令。

如指定:

1. CMD [“/bin/echo”, “this is a echo test ”]

build后运行(假设镜像名为ec):

1. docker run ec

就会输出: this is a echo test

注意:如果在docker run命令后指定命令,如docker run ec echo 'test',会将CMD的命令覆盖。CMD的命令不能接收run传过来的参数,而ENTRYPOINT可以

ENTRYPOINT

有两种用法

ENTRYPOINT ["executable", "param1", "param2"] (the preferred exec form)

ENTRYPOINT command param1 param2 (shell form)

第一种可以接收docker run命令传过来的参数(即使docker run传过来的是命令,也会被当做参数处理),如果想覆盖,可使用docker run ... --entrypoint COMMAND

java的源代码隐藏问题

你要的功能其实是Java代码混淆,如果要了解Java编译成exe,可以看“参考资料”。

下面一段文字摘自《Java 手机/PDA 程序设计入门》一书,可以做为混淆器性能的大致观点:

笔者没用过DashO,所以无法对其作出个人评价。所以现在仅说明笔者曾用过的产品。以笔者的个人观点,如果就混淆的程度来说,ZKM最好,JAX中等,RetroGuard和ProGuard最差,一分钱一分货,这是千古不变的道理。如果就功能性而言,ZKM和JAX都不错,不过,JAX是IBM所开发的产品,因此也继承了大部分IBM产品的最大特色,就是“功能超强,可是不易使用”,可能光是要看完JAX的设定文件就是一个很大的问题。

下面分别介绍几种具有代表性的混淆器,对它们的产品性能进行对比。我们使用不同混淆器对同一段java代码进行混淆,分别列出混淆后代码反编译的结果,并给出使用的一些直接体会。

原始java代码:

public class SimpleBean implements Serializable {

private String[] name = {"name0","name1","name2","name3"};

private List myList = null;

public void SimpleBean() {

myList = new ArrayList(4);

}

public void init_public() {

myList.add("name");

for(int i= 1; i 4; i++){

init_private(i);

}

}

private void init_private(int j) {

myList.add(name[j]);

}

private void writeObject(java.io.ObjectOutputStream out)

throws IOException {

}

}

一、ProGuard 4.5.1

ProGuard是一款免费的Java类文件压缩器、优化器和混淆器。它能发现并删除无用类、字段(field)、方法和属性值(attribute)。它也能优化字节码并删除无用的指令。最后,它使用简单无意义的名字来重命名你的类名、字段名和方法名。经过以上操作的jar文件 会变得更小,并很难进行逆向工程。eclipse已经把Proguard集成在一起了。它支持脚本控制,可以使用GUI界面,字符串不加密,支持 J2ME。

类似功能的开源混淆器:

RetroGuard yGuard(RetroGuard的一个升级版本) JODE

Jad反编译混淆后class得到的代码:

public class SimpleBean

implements Serializable

{

public SimpleBean()

{

a_java_util_List_fld = null;

}

public void SimpleBean()

{

a_java_util_List_fld = new ArrayList(4);

}

public void init_public()

{

a_java_util_List_fld.add("name");

for(int i = 1; i 4; i++)

{

int j = i;

SimpleBean simplebean = this;

a_java_util_List_fld.add(simplebean.a_java_lang_String_array1d_fld[j]);

}

}

private String a_java_lang_String_array1d_fld[] = {

"name0", "name1", "name2", "name3"

};

private List a_java_util_List_fld;

}

优点:

1、对内部private方法的调用进行了内联,但基本达不到混淆效果;

2、使用文档详尽,混淆选项配置文件的编写示例多;

3、混淆选项粒度较细,可以使用GUI界面,支持本地方法的保护等;

4、支持j2me,可以集成到Eclipse;

5、开源。

缺点:

1、符号混淆的命名具有提示性,字符串未加密,没有其它的混淆措施;

2、混淆主要针对Xlet、Midlet等应用,混淆库文件时配置文件将会很复杂。

二、Jocky

Jocky是金蝶中间件技术领袖袁红岗先生的个人作品(旧有名称JOC)。原本是方便Apusic 应用服务器的开发,现在开放出来,供大家自由使用。Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成。也就是说,它是直接从源码上做文章,这是Jocky与其它混淆编译器最大的不同之处。另外可以在源程序中插入符号保留指令来控制哪些符号需要保留,将混淆过程与开发过程融合在一起,不需要单独的混淆选项配置文件。Jocky的上述特点较适合于java类库的混淆。

Jad反编译混淆后class得到的代码:

public class SimpleBean

implements Serializable

{

public SimpleBean()

{

this;

String as[] = new String[4];

as;

as[0] = "name0";

as;

JVM INSTR swap ;

1;

"name1";

JVM INSTR aastore ;

JVM INSTR dup ;

JVM INSTR swap ;

2;

"name2";

JVM INSTR aastore ;

JVM INSTR dup ;

JVM INSTR swap ;

3;

"name3";

JVM INSTR aastore ;

_$2;

_$1 = null;

return;

}

public void SimpleBean()

{

this;

JVM INSTR new #9 Class ArrayList;

JVM INSTR dup ;

JVM INSTR swap ;

4;

ArrayList();

_$1;

}

public void init_public()

{

_$1.add("name");

for(int i = 1; i 4; i++)

_$1(i);

}

private void _$1(int i)

{

_$1.add(_$2[i]);

}

private void writeObject(ObjectOutputStream objectoutputstream)

throws IOException

{

}

private String _$2[];

private List _$1;

}

优点:

1、除符号混淆外增加了数据混淆(字符数组初始化);

2、有一些语句反编译只能得到字节码指令;

3、在Sun JDK中提供的Java编译器(javac)的基础上完成,编译和混淆一体完成,不需要先生成class文件再混淆;

4、提供了Eclipse的插件,能够直接在Eclipse中使用Jocky。

缺点:

1、混淆选项粒度较粗,使用中可能要在具体代码中添加@preserve指令来实现,工作量大;

2、没有控制流混淆。

三、Allatori 3.1_demo

Allatori属于第二代混淆器,具有全方位保护你的知识产权的能力。Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串编码,以及水印技术。对于教育和非商业项目来说这个混淆器是免费的。2.1版本支持war和ear文件格式,并且允许对需要混淆代码的应用程序添加有效日期。

Jad反编译混淆后class得到的代码:

public class SimpleBean

implements Serializable

{

public void init_public()

{

d.add(c.k("{u{0"));

int i = 1;

goto _L1

_L3:

H(i);

++i;

_L1:

4;

JVM INSTR icmplt 21;

goto _L2 _L3

_L2:

}

public void SimpleBean()

{

d = new ArrayList(4);

}

private void H(int a)

{

d.add(c[a]);

}

public SimpleBean()

{

d = null;

}

private void H(ObjectOutputStream objectoutputstream)

throws IOException

{

}

private String c[] = {

c.k("\177q\177te"), c.k("\177q\177td"), c.k("\177q\177tg"), c.k("\177q\177tf")

};

private List d;

}

注:c.k是为进行字符串加密额外生成的类c的静态方法。

优点:

1、设计考虑了库文件混淆的使用场景;

2、使用文档详尽,混淆选项配置文件的编写示例多;

3、除符号混淆外,还使用了两种高级的混淆手段:控制混淆(改写了for循环)和字符串加密(String数组初始化);

4、混淆选项粒度较细,支持本地方法的保护等;

5、支持水印技术,允许对需要混淆的代码添加有效日期;

6、支持j2me;

缺点:

1、商业软件(价格附后),对教育和非商业用途免费(网站链接是)。

附:价格情况

SINGLE DEVELOPER LICENSE

1 license $290

2-5 licenses $260

6-10 licenses $230

11+ licenses $200

SITE LICENSE $3750

BUSINESS LICENSE $4850

ANNUAL SUPPORT UPDATE $45

四、Zelix KlassMaster(ZKM)

Zelix KlassMaster是一个来自Zelix Pty Ltd的商业混淆器。官方文档中关于它的混淆特性的介绍很少。它的保护功能非常强大,可以进行符号混淆和控制混淆,支持字符串的复杂加密保护,堆栈混乱,支持异常重构,支持增量混淆,支持J2ME。Zelix KlassMaster提供试用版本,可以到下载。

五、DashO Pro

DashO Pro 是由Preemptive Solutions开发的商业化的混淆器. 免费的评估版可以到下载。DashO Pro代码保护能力强大易用,方便灵活(商业软件,非开源)。该Java混淆器是Sun的选择,对于企业级应用,作为其Java开发包的一部分,Sun微系统使用DashO Pro来混淆其加密库。DashO Pro能够对ID进行重新命名,使之成为毫无意义的字符;混淆元数据;改变控制流等,所有这些操作使得java代码被混淆,难于理解。产品特点包括:

领先的Java源码保护机制;

运用专利Overload-Induction技术对包/类/方法/域进行重命名;

高级的流程控制混淆机制;

字符串加密技术;

防止反编译器生成有用的输出;

水印软件;

提高Java源码效率;

不采用类/方法/域,全面移除常数存储库;

类/方法级别的优化,以提高JIT效果;

动态加载检测到的类;

全面高效的Java源码的拓展和部署;

支持所有的JDK版本 (JSE, J2EE, J2ME, etc)包括1.5;

自动堆栈跟踪转换;

在指定路径打包或者java jars;

支持任何打包类型的Java内容——程序、库、applets程序、小服务器程序、EJB等;支持基于J2ME CLDC的架构,包括MIDP和 iAppli;

支持CLDC预检验库中的类;

可以从指定路径、Zip压缩包或者jars中提取;

支持导出100%纯粹的Java,并提供验证;

命令行接口适合集成到构建环境内;

基于XML的配置文件,易于使用;

全面准确的PDF格式用户指南。

很简单的JAVA题目,我刚学,大虾帮帮忙!!

手上正好有一个 给你参考参考吧

是有时间戳+3个随机数组成的

import java.util.*;

import java.text.*;

class CreateId{

public static String getId(){

StringBuffer sb = new StringBuffer();

Random rand = new Random();

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

sb.append(sdf.format(new Date()));

for(int i=0;i3;i++){

sb.append(rand.nextInt(10));

}

return sb.toString();

}

}

public class DemoId{

public static void main(String args[]){

System.out.println(CreateId.getId());

}

}

java 调用打印机API无法打印的问题,请问找到解决方案了吗?

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Component;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.Toolkit;

import java.awt.print.Book;

import java.awt.print.PageFormat;

import java.awt.print.Paper;

import java.awt.print.Printable;

import java.awt.print.PrinterException;

import java.awt.print.PrinterJob;

public class PrintTest4 implements Printable{

/**

* @param Graphic指明打印的图形环境

* @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595×842点)

* @param pageIndex指明页号

*/

@Override

public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)

throws PrinterException {

System.out.println("指定页号:"+pageIndex);

Component c = null;

//print string

String str = "中华民族是勤劳、勇敢和富有智慧的伟大民族。";

//转换成Graphics2D

Graphics2D g2 = (Graphics2D) graphics;

//设置打印颜色为黑色

g2.setColor(Color.black);

//打印起点坐标

double x = pageFormat.getImageableX();

double y = pageFormat.getImageableY();

switch(pageIndex){

case 0:

//设置打印字体(字体名称、样式和点大小)(字体名称可以是物理或者逻辑名称)

//Java平台所定义的五种字体系列:Serif、SansSerif、Monospaced、Dialog 和 DialogInput

Font font = new Font("新宋体", Font.PLAIN, 9);

g2.setFont(font);//设置字体

//BasicStroke   bs_3=new   BasicStroke(0.5f);

float[]   dash1   =   {2.0f};

//设置打印线的属性。

//1.线宽 2、3、不知道,4、空白的宽度,5、虚线的宽度,6、偏移量

g2.setStroke(new   BasicStroke(0.5f,   BasicStroke.CAP_BUTT,   BasicStroke.JOIN_MITER,   2.0f,   dash1,   0.0f));

//g2.setStroke(bs_3);//设置线宽

float heigth = font.getSize2D();//字体高度

System.out.println("x="+x);

// -1- 用Graphics2D直接输出

//首字符的基线(右下部)位于用户空间中的 (x, y) 位置处

//g2.drawLine(10,10,200,300);

Image src = Toolkit.getDefaultToolkit().getImage("D:/背景图片/yesorno.jpg");

//D:\\EclipseWorkSpace3.1\\Kfc-wuxi\\WebRoot\\image\\KFC.jpg

g2.drawImage(src,(int)x,(int)y,c);

int img_Height=src.getHeight(c);

int img_width=src.getWidth(c);

//System.out.println("img_Height="+img_Height+"img_width="+img_width) ;

g2.drawString(str, (float)x, (float)y+1*heigth+img_Height);

g2.drawLine((int)x,(int)(y+1*heigth+img_Height+10),(int)x+200,(int)(y+1*heigth+img_Height+10));

g2.drawImage(src,(int)x,(int)(y+1*heigth+img_Height+11),c);

return PAGE_EXISTS;

default:

return NO_SUCH_PAGE;

}

}

public static void main(String[] args) {

//通俗理解就是书、文档

Book book = new Book();

//设置成竖打

PageFormat pf = new PageFormat();

pf.setOrientation(PageFormat.PORTRAIT);

//通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。

Paper p = new Paper();

p.setSize(590,840);//纸张大小

p.setImageableArea(10,10, 590,840);//A4(595 X 842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72

pf.setPaper(p);

//把 PageFormat 和 Printable 添加到书中,组成一个页面

book.append(new PrintTest4(), pf);

//获取打印服务对象

PrinterJob job = PrinterJob.getPrinterJob();

//设置打印类

job.setPageable(book);

try {

//可以用printDialog显示打印对话框,在用户确认后打印;也可以直接打印

boolean a=job.printDialog();

if(a){

job.print();

}

} catch (PrinterException e) {

e.printStackTrace();

}

}

}

如何理解JAVA开发效率低

1. 至今为止,java是大量实际得到应用的语言中,可读性最强,最利于阅读和理解,语法最严谨和规范的语言(当然,这也可以理解为语法繁琐的另一种表述)之一,在这一点上,只有已经基本退出历史舞台的pascal可与之相提并论。而pascal并不是面对对象的,(面对对象的特点和优势我就不再赘述了,有兴趣可以查阅相关资料)。

基于这一点,产生了很多其独特的优势,例如:

java是目前最佳的算法及数据结构教学语言(这个位置以前曾经是属于pascal的)

java是传统的软件开发过程(生命周期管理)的最佳实践语言,即在传统的 “需求-设计-代码-测试” 这样的一个过程中,java是最能够最大程度贯彻和实践软件工程学的理论的。从建模设计工具直接生成代码,没有比java更出色和靠谱的了。而从代码去逆向生成的javadoc和uml也堪称经典。只有java能够在执行和操作层面,将“设计-代码”这个过程如此出色的无缝集成起来。

java的白盒测试方面的表现非常出色和易行

java在代码评审,缺陷管理,开发规范约束,大团队的协同开发方面,有着无可争辩的突出优势

其实这样的例子有很多,就不一一举述了

2. java有着目前为止,最丰富,最强大的IDE开发环境,这是历史原因形成的,包括商业因素在内

3. java有着现有所有语言中,拥有最长的产品线,适用性是最广的语言之一。从前端的app应用,到嵌入式,到web,到服务器应用

4. java拥有所有语言中最丰富的类库和代码资源

5. 至今为止,在被广泛应用的编程语言中,java依然是开发效率最高的语言。之所以使用编程语言这个词,是为了和脚本语言,以及4GL开发工具区隔开来。这些语言和编程语言相比,其适用性都有很大局限,而且后者(4GL)和OS平台紧耦合关联。事实上,近10多年来,脚本语言领域突飞猛进(有赖于web应用提供了广阔的舞台),而编程语言基本上自java之后就没有太多大的新鲜事了。

商业层面:

1. java是目前为止唯一的,在商业和开源领域都得到大力推广,推荐和使用的语言,其背后的推力是任何语言所不能比拟的。

2. java的诞生和发展,赶上了千载难逢的好机遇,历史造就了java,这里就不展开了。

======================================================================

下面补充两句,关于java与c/c++, java 与 Ruby、Python,以及企业软件。

我个人是写汇编和basic出身的,后来有大量的时间花在了C/C++上,java当年刚刚出来的时候,我正热衷于CGI和perl的编程,也就是拿java做了一个简单的applet玩玩而已。直到2005年,我才开始使用java大量得写程序,一直到今天。去年底又开始学习Ruby和rails。20多年来,我正式使用过,有产品或者产出物的其他语言和工具也很多,包括foxbase,fortran,pascal,ada,lisp,VB,delphi,PB,C#,obj-c++,lua,PHP,js等等,Python和smalltalk也研究过一下。体会和感慨其实是挺多的。

到目前为止,其实我最喜欢的工具是PB,没有之一。这和我的工作特点是密切相关的。但是PB只是一个在特定的狭窄领域做到极为出色的工具,随着时代变迁,也就慢慢退出历史舞台了。

直到目前为止,在我看来,拥有根本性的,不可替代优势的语言,只有C/C++。虽然它可能开发效率更低,体系更复杂和笨重。在许多领域,C/C++是唯一的选择,没有替代品,它的适用性,也是最广的,虽然在一些领域,它不是最佳的选择,但是也是可用的选择,哪怕是WEB领域,在一些直接和工控设备以及硬件打交道的web应用中,C CGI依然是很好甚至是最佳的选择。

java的某些优势,可以称之为接近于不可替代。前面具体的优势不复赘述,综合来说,对于目的明确,业务非常复杂的应用,需要大规模团队协同开发的,需要有复杂的设计过程的,java是毫无疑问的选择,这也是为什么java在企业应用领域大旗飘飘,傲视群雄的原因。即便像在互联网领域,类似淘宝这样有着复杂业务的公众应用,java的使用也应该是必不可少的。(具体情况我不了解,有可能是某些局部的前端使用脚本语言,但是java应该是后台的骨架)

完全用脚本类语言去构建一个类似淘宝这样的复杂系统,应该说是近乎不可能的。

现在一般谈论Java 语言被很多人抱怨语法繁琐、开发效率低、体系繁杂而笨重的人,基本上是敏捷性开发的拥护者,Python和ruby的使用者,尤其是ruby和rails的粉丝。

确实,作为一个正在学习ruby的人,对ruby和rails的优点我极为赞叹,在某些WEB应用中,用ruby和rails开发其效率是java的10倍,这真的一点都不是夸张之词。简单,易学,高效,看上去很美,确实也很美。只是它的适用范围相对就要窄一些。并不是所有的应用都适合或者都能够用ruby和rails来开发的。在一些应用中,使用ruby和rails可能效果就很糟糕了。

对于java来说,Python和ruby这样的脚本语言可能就像当年java对于C/C++一样,在某些领域以其突出的优势取代它,但是在其他的一些领域,脚本语言还是不能完全取代java。就像java不能完全取代C/C++一样。要知道脚本语言的诞生,例如perl,还远在java之前。

即便如此,在web开发领域,在ruby异军突起的今天,我认为web应用开发的脚本语言领域,还远未到其终极形态。也许,类似于WEB应用领域的4GL工具,已经呼之欲出了,至少在dashcode上,我看到了苹果的这种野心。

或者我们期待一种全新的,革命性的编程语言的到来。

关于dashjava和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。