Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
3fe03bfa
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
3fe03bfa
编写于
1月 21, 2011
作者:
M
mchung
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
6912013: Remove the temporary launcher fix to add modules in the bootclasspath
Reviewed-by: ksrini
上级
1645804e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
112 addition
and
121 deletion
+112
-121
src/share/bin/java.c
src/share/bin/java.c
+73
-107
src/share/bin/java.h
src/share/bin/java.h
+4
-3
src/share/classes/sun/launcher/LauncherHelper.java
src/share/classes/sun/launcher/LauncherHelper.java
+35
-11
未找到文件。
src/share/bin/java.c
浏览文件 @
3fe03bfa
...
...
@@ -94,15 +94,15 @@ static int numOptions, maxOptions;
* Prototypes for functions internal to launcher.
*/
static
void
SetClassPath
(
const
char
*
s
);
static
void
SetModulesBootClassPath
(
const
char
*
s
);
static
void
SelectVersion
(
int
argc
,
char
**
argv
,
char
**
main_class
);
static
jboolean
ParseArguments
(
int
*
pargc
,
char
***
pargv
,
char
**
pjarfile
,
char
**
pclassname
,
int
*
pret
,
const
char
*
jvmpath
);
static
jboolean
ParseArguments
(
int
*
pargc
,
char
***
pargv
,
int
*
pmode
,
char
**
pwhat
,
int
*
pret
,
const
char
*
jrepath
);
static
jboolean
InitializeJVM
(
JavaVM
**
pvm
,
JNIEnv
**
penv
,
InvocationFunctions
*
ifn
);
static
jstring
NewPlatformString
(
JNIEnv
*
env
,
char
*
s
);
static
jobjectArray
NewPlatformStringArray
(
JNIEnv
*
env
,
char
**
strv
,
int
strc
);
static
jclass
LoadMainClass
(
JNIEnv
*
env
,
jboolean
isJar
,
char
*
name
);
static
jclass
LoadMainClass
(
JNIEnv
*
env
,
int
mode
,
char
*
name
);
static
void
TranslateApplicationArgs
(
int
jargc
,
const
char
**
jargv
,
int
*
pargc
,
char
***
pargv
);
static
jboolean
AddApplicationOptions
(
int
cpathc
,
const
char
**
cpathv
);
...
...
@@ -158,18 +158,27 @@ static jboolean IsWildCardEnabled();
* Running Java code in primordial thread caused many problems. We will
* create a new thread to invoke JVM. See 6316197 for more information.
*/
static
jlong
threadStackSize
=
0
;
/* stack size of the new thread */
static
jlong
threadStackSize
=
0
;
/* stack size of the new thread */
static
jlong
maxHeapSize
=
0
;
/* max heap size */
static
jlong
initialHeapSize
=
0
;
/* inital heap size */
int
JNICALL
JavaMain
(
void
*
args
);
/* entry point */
enum
LaunchMode
{
// cf. sun.launcher.LauncherHelper
LM_UNKNOWN
=
0
,
LM_CLASS
,
LM_JAR
};
static
const
char
*
launchModeNames
[]
=
{
"Unknown"
,
"Main class"
,
"JAR file"
};
typedef
struct
{
int
argc
;
char
**
argv
;
char
*
jarfil
e
;
char
*
classname
;
InvocationFunctions
ifn
;
int
argc
;
char
**
argv
;
int
mod
e
;
char
*
what
;
InvocationFunctions
ifn
;
}
JavaMainArgs
;
/*
...
...
@@ -189,8 +198,8 @@ JLI_Launch(int argc, char ** argv, /* main argc, argc */
jint
ergo
/* ergonomics class policy */
)
{
char
*
jarfile
=
0
;
char
*
classname
=
0
;
int
mode
=
LM_UNKNOWN
;
char
*
what
=
NULL
;
char
*
cpath
=
0
;
char
*
main_class
=
NULL
;
int
ret
;
...
...
@@ -277,24 +286,21 @@ JLI_Launch(int argc, char ** argv, /* main argc, argc */
SetClassPath
(
cpath
);
}
/*
* Parse command line options; if the return value of
* ParseArguments is false, the program should exit.
/* Parse command line options; if the return value of
* ParseArguments is false, the program should exit.
*/
if
(
!
ParseArguments
(
&
argc
,
&
argv
,
&
jarfile
,
&
classname
,
&
ret
,
jvmpath
))
{
if
(
!
ParseArguments
(
&
argc
,
&
argv
,
&
mode
,
&
what
,
&
ret
,
jrepath
))
{
return
(
ret
);
}
/* Set bootclasspath for modules */
SetModulesBootClassPath
(
jrepath
);
/* Override class path if -jar flag was specified */
if
(
jarfile
!=
0
)
{
SetClassPath
(
jarfile
);
if
(
mode
==
LM_JAR
)
{
SetClassPath
(
what
);
/* Override class path */
}
/* set the -Dsun.java.command pseudo property */
SetJavaCommandLineProp
(
classname
,
jarfile
,
argc
,
argv
);
SetJavaCommandLineProp
(
what
,
argc
,
argv
);
/* Set the -Dsun.java.launcher pseudo property */
SetJavaLauncherProp
();
...
...
@@ -305,7 +311,7 @@ JLI_Launch(int argc, char ** argv, /* main argc, argc */
/* Show the splash screen if needed */
ShowSplashScreen
();
return
ContinueInNewThread
(
&
ifn
,
argc
,
argv
,
jarfile
,
classname
,
ret
);
return
ContinueInNewThread
(
&
ifn
,
argc
,
argv
,
mode
,
what
,
ret
);
}
/*
...
...
@@ -353,13 +359,13 @@ JavaMain(void * _args)
JavaMainArgs
*
args
=
(
JavaMainArgs
*
)
_args
;
int
argc
=
args
->
argc
;
char
**
argv
=
args
->
argv
;
char
*
jarfile
=
args
->
jarfil
e
;
char
*
classname
=
args
->
classname
;
int
mode
=
args
->
mod
e
;
char
*
what
=
args
->
what
;
InvocationFunctions
ifn
=
args
->
ifn
;
JavaVM
*
vm
=
0
;
JNIEnv
*
env
=
0
;
jclass
mainClass
;
jclass
mainClass
=
NULL
;
jmethodID
mainID
;
jobjectArray
mainArgs
;
int
ret
=
0
;
...
...
@@ -385,7 +391,7 @@ JavaMain(void * _args)
CHECK_EXCEPTION_LEAVE
(
1
);
}
/* If the user specified neither a class name nor a JAR file */
if
(
printXUsage
||
printUsage
||
(
jarfile
==
0
&&
classname
==
0
)
)
{
if
(
printXUsage
||
printUsage
||
what
==
0
||
mode
==
LM_UNKNOWN
)
{
PrintUsage
(
env
,
printXUsage
);
CHECK_EXCEPTION_LEAVE
(
1
);
LEAVE
();
...
...
@@ -399,11 +405,11 @@ JavaMain(void * _args)
(
long
)(
jint
)
Counter2Micros
(
end
-
start
));
}
/* At this stage, argc/argv have the application
s'
arguments */
/* At this stage, argc/argv have the application
's
arguments */
if
(
JLI_IsTraceLauncher
()){
int
i
;
printf
(
"
Main-Class is '%s'
\n
"
,
classname
?
classname
:
""
);
printf
(
"App
s'
argc is %d
\n
"
,
argc
);
printf
(
"
%s is '%s'
\n
"
,
launchModeNames
[
mode
],
what
);
printf
(
"App
's
argc is %d
\n
"
,
argc
);
for
(
i
=
0
;
i
<
argc
;
i
++
)
{
printf
(
" argv[%2d] = '%s'
\n
"
,
i
,
argv
[
i
]);
}
...
...
@@ -431,11 +437,7 @@ JavaMain(void * _args)
* 2) Remove the vestages of maintaining main_class through
* the environment (and remove these comments).
*/
if
(
jarfile
!=
0
)
{
mainClass
=
LoadMainClass
(
env
,
JNI_TRUE
,
jarfile
);
}
else
{
mainClass
=
LoadMainClass
(
env
,
JNI_FALSE
,
classname
);
}
mainClass
=
LoadMainClass
(
env
,
mode
,
what
);
CHECK_EXCEPTION_NULL_LEAVE
(
mainClass
);
/*
...
...
@@ -697,7 +699,7 @@ AddOption(char *str, void *info)
if
(
JLI_StrCCmp
(
str
,
"-Xms"
)
==
0
)
{
jlong
tmp
;
if
(
parse_size
(
str
+
4
,
&
tmp
))
{
initialHeapSize
=
tmp
;
initialHeapSize
=
tmp
;
}
}
}
...
...
@@ -718,44 +720,6 @@ SetClassPath(const char *s)
JLI_MemFree
((
char
*
)
s
);
}
/*
* Set the bootclasspath for modules.
* A temporary workaround until jigsaw is integrated into JDK 7.
*/
static
void
SetModulesBootClassPath
(
const
char
*
jrepath
)
{
char
*
def
,
*
s
;
char
pathname
[
MAXPATHLEN
];
const
char
separator
[]
=
{
FILE_SEPARATOR
,
'\0'
};
const
char
*
orig
=
jrepath
;
static
const
char
format
[]
=
"-Xbootclasspath/p:%s"
;
struct
stat
statbuf
;
/* return if jre/lib/rt.jar exists */
JLI_Snprintf
(
pathname
,
sizeof
(
pathname
),
"%s%slib%srt.jar"
,
jrepath
,
separator
,
separator
);
if
(
stat
(
pathname
,
&
statbuf
)
==
0
)
{
return
;
}
/* return if jre/classes exists */
JLI_Snprintf
(
pathname
,
sizeof
(
pathname
),
"%s%sclasses"
,
jrepath
,
separator
);
if
(
stat
(
pathname
,
&
statbuf
)
==
0
)
{
return
;
}
/* modularized jre */
JLI_Snprintf
(
pathname
,
sizeof
(
pathname
),
"%s%slib%s*"
,
jrepath
,
separator
,
separator
);
s
=
(
char
*
)
JLI_WildcardExpandClasspath
(
pathname
);
def
=
JLI_MemAlloc
(
sizeof
(
format
)
-
2
/* strlen("%s") */
+
JLI_StrLen
(
s
));
sprintf
(
def
,
format
,
s
);
AddOption
(
def
,
NULL
);
if
(
s
!=
orig
)
JLI_MemFree
((
char
*
)
s
);
}
/*
* The SelectVersion() routine ensures that an appropriate version of
* the JRE is running. The specification for the appropriate version
...
...
@@ -1000,16 +964,17 @@ SelectVersion(int argc, char **argv, char **main_class)
/*
* Parses command line arguments. Returns JNI_FALSE if launcher
* should exit without starting vm, returns JNI_TRUE if vm needs
* to be started to process
given options.
*pret (the launcher
* to be started to process
given options.
*pret (the launcher
* process return value) is set to 0 for a normal exit.
*/
static
jboolean
ParseArguments
(
int
*
pargc
,
char
***
pargv
,
char
**
pjarfile
,
char
**
pclassname
,
int
*
pret
,
const
char
*
jvmpath
)
ParseArguments
(
int
*
pargc
,
char
***
pargv
,
int
*
pmode
,
char
**
pwhat
,
int
*
pret
,
const
char
*
jrepath
)
{
int
argc
=
*
pargc
;
char
**
argv
=
*
pargv
;
jboolean
jarflag
=
JNI_FALSE
;
int
mode
=
LM_UNKNOWN
;
char
*
arg
;
*
pret
=
0
;
...
...
@@ -1019,10 +984,11 @@ ParseArguments(int *pargc, char ***pargv, char **pjarfile,
if
(
JLI_StrCmp
(
arg
,
"-classpath"
)
==
0
||
JLI_StrCmp
(
arg
,
"-cp"
)
==
0
)
{
ARG_CHECK
(
argc
,
ARG_ERROR1
,
arg
);
SetClassPath
(
*
argv
);
mode
=
LM_CLASS
;
argv
++
;
--
argc
;
}
else
if
(
JLI_StrCmp
(
arg
,
"-jar"
)
==
0
)
{
ARG_CHECK
(
argc
,
ARG_ERROR2
,
arg
);
jarflag
=
JNI_TRUE
;
mode
=
LM_JAR
;
}
else
if
(
JLI_StrCmp
(
arg
,
"-help"
)
==
0
||
JLI_StrCmp
(
arg
,
"-h"
)
==
0
||
JLI_StrCmp
(
arg
,
"-?"
)
==
0
)
{
...
...
@@ -1102,19 +1068,24 @@ ParseArguments(int *pargc, char ***pargv, char **pjarfile,
}
if
(
--
argc
>=
0
)
{
if
(
jarflag
)
{
*
pjarfile
=
*
argv
++
;
*
pclassname
=
NULL
;
}
else
{
*
pjarfile
=
NULL
;
*
pclassname
=
*
argv
++
;
}
*
pargc
=
argc
;
*
pargv
=
argv
;
*
pwhat
=
*
argv
++
;
}
if
(
*
pjarfile
==
NULL
&&
*
pclassname
==
NULL
)
{
if
(
*
pwhat
==
NULL
)
{
*
pret
=
1
;
}
else
if
(
mode
==
LM_UNKNOWN
)
{
/* default to LM_CLASS if -jar and -cp option are
* not specified */
mode
=
LM_CLASS
;
}
if
(
argc
>=
0
)
{
*
pargc
=
argc
;
*
pargv
=
argv
;
}
*
pmode
=
mode
;
return
JNI_TRUE
;
}
...
...
@@ -1263,7 +1234,7 @@ NewPlatformStringArray(JNIEnv *env, char **strv, int strc)
* call it for more details refer to the java implementation.
*/
static
jclass
LoadMainClass
(
JNIEnv
*
env
,
jboolean
isJar
,
char
*
name
)
LoadMainClass
(
JNIEnv
*
env
,
int
mode
,
char
*
name
)
{
jclass
cls
;
jmethodID
mid
;
...
...
@@ -1276,9 +1247,9 @@ LoadMainClass(JNIEnv *env, jboolean isJar, char *name)
}
NULL_CHECK0
(
cls
=
FindBootStrapClass
(
env
,
"sun/launcher/LauncherHelper"
));
NULL_CHECK0
(
mid
=
(
*
env
)
->
GetStaticMethodID
(
env
,
cls
,
"checkAndLoadMain"
,
"(Z
ZLjava/lang/String;)Ljava/lang/Object
;"
));
"(Z
ILjava/lang/String;)Ljava/lang/Class
;"
));
str
=
(
*
env
)
->
NewStringUTF
(
env
,
name
);
result
=
(
*
env
)
->
CallStaticObjectMethod
(
env
,
cls
,
mid
,
JNI_TRUE
,
isJar
,
str
);
result
=
(
*
env
)
->
CallStaticObjectMethod
(
env
,
cls
,
mid
,
JNI_TRUE
,
mode
,
str
);
if
(
JLI_IsTraceLauncher
())
{
end
=
CounterGet
();
...
...
@@ -1424,8 +1395,7 @@ AddApplicationOptions(int cpathc, const char **cpathv)
* property is not exported by HotSpot to the Java layer.
*/
void
SetJavaCommandLineProp
(
char
*
classname
,
char
*
jarfile
,
int
argc
,
char
**
argv
)
SetJavaCommandLineProp
(
char
*
what
,
int
argc
,
char
**
argv
)
{
int
i
=
0
;
...
...
@@ -1433,22 +1403,17 @@ SetJavaCommandLineProp(char *classname, char *jarfile,
char
*
javaCommand
=
NULL
;
char
*
dashDstr
=
"-Dsun.java.command="
;
if
(
classname
==
NULL
&&
jarfile
==
NULL
)
{
if
(
what
==
NULL
)
{
/* unexpected, one of these should be set. just return without
* setting the property
*/
return
;
}
/* if the class name is not set, then use the jarfile name */
if
(
classname
==
NULL
)
{
classname
=
jarfile
;
}
/* determine the amount of memory to allocate assuming
* the individual components will be space separated
*/
len
=
JLI_StrLen
(
classname
);
len
=
JLI_StrLen
(
what
);
for
(
i
=
0
;
i
<
argc
;
i
++
)
{
len
+=
JLI_StrLen
(
argv
[
i
])
+
1
;
}
...
...
@@ -1459,7 +1424,7 @@ SetJavaCommandLineProp(char *classname, char *jarfile,
/* build the -D string */
*
javaCommand
=
'\0'
;
JLI_StrCat
(
javaCommand
,
dashDstr
);
JLI_StrCat
(
javaCommand
,
classname
);
JLI_StrCat
(
javaCommand
,
what
);
for
(
i
=
0
;
i
<
argc
;
i
++
)
{
/* the components of the string are space separated. In
...
...
@@ -1479,7 +1444,8 @@ SetJavaCommandLineProp(char *classname, char *jarfile,
* JVM would like to know if it's created by a standard Sun launcher, or by
* user native application, the following property indicates the former.
*/
void
SetJavaLauncherProp
()
{
void
SetJavaLauncherProp
()
{
AddOption
(
"-Dsun.java.launcher=SUN_STANDARD"
,
NULL
);
}
...
...
@@ -1913,8 +1879,8 @@ IsWildCardEnabled()
}
static
int
ContinueInNewThread
(
InvocationFunctions
*
ifn
,
int
argc
,
char
**
argv
,
char
*
jarfile
,
char
*
classname
,
int
ret
)
ContinueInNewThread
(
InvocationFunctions
*
ifn
,
int
argc
,
char
**
argv
,
int
mode
,
char
*
what
,
int
ret
)
{
/*
...
...
@@ -1938,8 +1904,8 @@ ContinueInNewThread(InvocationFunctions* ifn, int argc,
args
.
argc
=
argc
;
args
.
argv
=
argv
;
args
.
jarfile
=
jarfil
e
;
args
.
classname
=
classname
;
args
.
mode
=
mod
e
;
args
.
what
=
what
;
args
.
ifn
=
*
ifn
;
rslt
=
ContinueInNewThread0
(
JavaMain
,
threadStackSize
,
(
void
*
)
&
args
);
...
...
src/share/bin/java.h
浏览文件 @
3fe03bfa
...
...
@@ -153,7 +153,7 @@ int ContinueInNewThread0(int (JNICALL *continuation)(void *),
/* sun.java.launcher.* platform properties. */
void
SetJavaLauncherPlatformProps
(
void
);
void
SetJavaCommandLineProp
(
char
*
classname
,
char
*
jarfile
,
int
argc
,
char
**
argv
);
void
SetJavaCommandLineProp
(
char
*
what
,
int
argc
,
char
**
argv
);
void
SetJavaLauncherProp
(
void
);
/*
...
...
@@ -178,8 +178,9 @@ jint GetErgoPolicy();
jboolean
ServerClassMachine
();
static
int
ContinueInNewThread
(
InvocationFunctions
*
ifn
,
int
argc
,
char
**
argv
,
char
*
jarfile
,
char
*
classname
,
int
ret
);
static
int
ContinueInNewThread
(
InvocationFunctions
*
ifn
,
int
argc
,
char
**
argv
,
int
mode
,
char
*
what
,
int
ret
);
/*
* Initialize platform specific settings
...
...
src/share/classes/sun/launcher/LauncherHelper.java
浏览文件 @
3fe03bfa
...
...
@@ -401,6 +401,14 @@ public enum LauncherHelper {
}
}
// From src/share/bin/java.c:
// enum LaunchMode { LM_UNKNOWN = 0, LM_CLASS, LM_JAR };
private
static
final
int
LM_UNKNOWN
=
0
;
private
static
final
int
LM_CLASS
=
1
;
private
static
final
int
LM_JAR
=
2
;
/**
* This method does the following:
* 1. gets the classname from a Jar's manifest, if necessary
...
...
@@ -420,24 +428,40 @@ public enum LauncherHelper {
* @return
* @throws java.io.IOException
*/
public
static
Object
checkAndLoadMain
(
boolean
printToStderr
,
boolean
isJar
,
String
name
)
throws
IOException
{
public
static
Class
<?>
checkAndLoadMain
(
boolean
printToStderr
,
int
mode
,
String
what
)
throws
IOException
{
ClassLoader
ld
=
ClassLoader
.
getSystemClassLoader
();
// get the class name
String
classname
=
(
isJar
)
?
getMainClassFromJar
(
name
)
:
name
;
classname
=
classname
.
replace
(
'/'
,
'.'
);
ClassLoader
loader
=
ClassLoader
.
getSystemClassLoader
();
Class
<?>
clazz
=
null
;
String
cn
=
null
;
switch
(
mode
)
{
case
LM_CLASS:
cn
=
what
;
break
;
case
LM_JAR:
cn
=
getMainClassFromJar
(
what
);
break
;
default
:
throw
new
InternalError
(
""
+
mode
+
": Unknown launch mode"
);
}
cn
=
cn
.
replace
(
'/'
,
'.'
);
PrintStream
ostream
=
(
printToStderr
)
?
System
.
err
:
System
.
out
;
Class
<?>
c
=
null
;
try
{
c
lazz
=
loader
.
loadClass
(
classname
);
c
=
ld
.
loadClass
(
cn
);
}
catch
(
ClassNotFoundException
cnfe
)
{
ostream
.
println
(
getLocalizedMessage
(
"java.launcher.cls.error1"
,
classname
));
NoClassDefFoundError
ncdfe
=
new
NoClassDefFoundError
(
classname
);
ostream
.
println
(
getLocalizedMessage
(
"java.launcher.cls.error1"
,
cn
));
NoClassDefFoundError
ncdfe
=
new
NoClassDefFoundError
(
cn
);
ncdfe
.
initCause
(
cnfe
);
throw
ncdfe
;
}
signatureDiagnostic
(
ostream
,
c
lazz
);
return
c
lazz
;
signatureDiagnostic
(
ostream
,
c
);
return
c
;
}
static
void
signatureDiagnostic
(
PrintStream
ostream
,
Class
<?>
clazz
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录