📄 minefield.sh
字号:
#!/bin/sh## Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.## This code is free software; you can redistribute it and/or modify it# under the terms of the GNU General Public License version 2 only, as# published by the Free Software Foundation.## This code is distributed in the hope that it will be useful, but WITHOUT# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License# version 2 for more details (a copy is included in the LICENSE file that# accompanied this code).## You should have received a copy of the GNU General Public License version# 2 along with this work; if not, write to the Free Software Foundation,# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.## Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,# CA 95054 USA or visit www.sun.com if you need additional information or# have any questions.### @test# @bug 4758537 4809833# @summary Test that javac and java find files in similar ways# @author Martin Buchholz## @run shell/timeout=600 MineField.sh# To run this test manually, simply do ./MineField.sh#----------------------------------------------------------------# The search order for classes used by both java and javac is:## -Xbootclasspath/p:<path># -endorseddirs <dirs> or -Djava.endorsed.dirs=<dirs> (search for jar/zip only)# -bootclasspath <path> or -Xbootclasspath:<path># -Xbootclasspath/a:<path># -extdirs <dirs> or -Djava.ext.dirs=<dirs> (search for jar/zip only)# -classpath <path>, -cp <path>, env CLASSPATH=<path>## Peculiarities of the class file search:# - Empty elements of the (user) classpath default to ".",# while empty elements of other paths are ignored.# - Only for the user classpath is an empty string value equivalent to "."# - Specifying a bootclasspath on the command line obliterates any# previous -Xbootclasspath/p: or -Xbootclasspath/a: command line flags.#----------------------------------------------------------------. ${TESTSRC-.}/Util.shset -uBCP=`DefaultBootClassPath`#----------------------------------------------------------------# Prepare the "Minefield"#----------------------------------------------------------------Cleanup() { Sys rm -rf GooSrc GooJar GooZip GooClass Sys rm -rf BadSrc BadJar BadZip BadClass Sys rm -rf OneDir *.class Main.java MANIFEST.MF}CleanupSys mkdir GooSrc GooJar GooZip GooClassSys mkdir BadSrc BadJar BadZip BadClassecho 'public class Lib {public static void f(){}}' > Lib.javaSys "$javac" ${TESTTOOLVMOPTS} Lib.javaSys "$jar" cf GooJar/Lib.jar Lib.classSys "$jar" cf GooZip/Lib.zip Lib.classSys mv Lib.class GooClass/.Sys mv Lib.java GooSrc/.CheckFiles GooZip/Lib.zip GooJar/Lib.jar GooSrc/Lib.javaecho 'public class Lib {/* Bad */}' > Lib.javaSys "$javac" ${TESTTOOLVMOPTS} Lib.javaSys "$jar" cf BadJar/Lib.jar Lib.classSys "$jar" cf BadZip/Lib.zip Lib.classSys mv Lib.class BadClass/.Sys mv Lib.java BadSrc/.CheckFiles BadZip/Lib.zip BadJar/Lib.jar BadSrc/Lib.javaecho 'public class Main {public static void main(String[] a) {Lib.f();}}' > Main.java#----------------------------------------------------------------# Verify that javac class search order is the same as java's#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"BadClass" \ -J-Djava.endorsed.dirs="GooJar" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ -J-Djava.endorsed.dirs="BadJar${PS}GooZip" \ Main.javaFailure "$java" ${TESTVMOPTS} \ -Xbootclasspath/p:"BadClass" \ -Djava.endorsed.dirs="GooJar" \ MainSuccess "$java" ${TESTVMOPTS} \ -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ -Djava.endorsed.dirs="BadJar${PS}GooZip" \ Main#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"GooClass" \ -bootclasspath "$BCP${PS}BadZip/Lib.zip" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"BadClass${PS}GooClass" \ -bootclasspath "$BCP${PS}GooZip/Lib.zip${PS}BadClass" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"BadJar/Lib.jar" \ -Xbootclasspath:"$BCP${PS}GooClass" \ Main.javaFailure "$java" ${TESTVMOPTS} \ -Xbootclasspath/p:"GooClass" \ -Xbootclasspath:"$BCP${PS}BadZip/Lib.zip" \ MainSuccess "$java" ${TESTVMOPTS} \ -Xbootclasspath/p:"BadClass${PS}GooClass" \ -Xbootclasspath:"$BCP${PS}GooZip/Lib.zip${PS}BadClass" \ Main#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} \ -bootclasspath "$BCP${PS}GooZip/Lib.zip" \ -Xbootclasspath/p:"BadClass" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -bootclasspath "$BCP${PS}BadZip/Lib.zip" \ -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ Main.javaFailure "$java" ${TESTVMOPTS} \ -Xbootclasspath:"$BCP${PS}GooClass" \ -Xbootclasspath/p:"BadClass" \ MainSuccess "$java" ${TESTVMOPTS} \ -Xbootclasspath:"$BCP${PS}BadClass" \ -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ Main#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"BadClass" \ -Xbootclasspath/a:"GooClass" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"GooClass${PS}BadClass" \ -Xbootclasspath/a:"BadClass" \ Main.javaFailure "$java" ${TESTVMOPTS} \ -Xbootclasspath/p:"BadClass" \ -Xbootclasspath/a:"GooClass" \ MainSuccess "$java" ${TESTVMOPTS} \ -Xbootclasspath/p:"GooClass${PS}BadClass" \ -Xbootclasspath/a:"BadClass" \ Main#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"GooClass" \ -J-Djava.endorsed.dirs="BadZip" \ -bootclasspath "GooClass${PS}$BCP" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"BadClass" \ -J-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ -bootclasspath "BadClass${PS}$BCP" \ Main.javaFailure "$java" ${TESTVMOPTS} \ -Xbootclasspath/p:"GooClass" \ -Djava.endorsed.dirs="BadZip" \ -Xbootclasspath:"GooClass${PS}$BCP" \ MainSuccess "$java" ${TESTVMOPTS} \ -Xbootclasspath/p:"BadClass" \ -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ -Xbootclasspath:"BadClass${PS}$BCP" \ Main#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"GooClass" \ -Xbootclasspath:"BadClass${PS}$BCP" \ -Xbootclasspath/a:"GooClass" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/p:"BadClass" \ -Xbootclasspath:"GooClass${PS}BadClass${PS}$BCP" \ -Xbootclasspath/a:"BadClass" \ Main.javaFailure "$java" ${TESTVMOPTS} \ -Xbootclasspath/p:"GooClass" \ -Xbootclasspath:"BadClass${PS}$BCP" \ -Xbootclasspath/a:"GooClass" \ MainSuccess "$java" ${TESTVMOPTS} \ -Xbootclasspath/p:"BadClass" \ -Xbootclasspath:"GooClass${PS}BadClass${PS}$BCP" \ -Xbootclasspath/a:"BadClass" \ Main#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} \ -J-Djava.endorsed.dirs="BadZip" \ -Xbootclasspath:"GooClass${PS}$BCP" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -endorseddirs "BadClass${PS}GooZip${PS}BadJar" \ -Xbootclasspath:"BadClass${PS}$BCP" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ -Xbootclasspath:"BadClass${PS}$BCP" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -J-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ -Xbootclasspath:"BadClass${PS}$BCP" \ Main.javaFailure "$java" ${TESTVMOPTS} \ -Djava.endorsed.dirs="BadZip" \ -Xbootclasspath:"GooClass${PS}$BCP" \ MainSuccess "$java" ${TESTVMOPTS} \ -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ -Xbootclasspath:"BadClass${PS}$BCP" \ Main#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/a:"BadClass" \ -extdirs "GooZip" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/a:"GooClass${PS}BadClass" \ -extdirs "BadZip" \ Main.javaFailure "$java" ${TESTVMOPTS} \ -Xbootclasspath/a:"BadClass" \ -Djava.ext.dirs="GooZip" \ MainSuccess "$java" ${TESTVMOPTS} \ -Xbootclasspath/a:"GooClass${PS}BadClass" \ -Djava.ext.dirs="BadZip" \ Main#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} \ -bootclasspath "$BCP${PS}BadJar/Lib.jar" \ -J-Djava.ext.dir="GooJar" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -bootclasspath "$BCP${PS}GooJar/Lib.jar${PS}BadClass" \ -J-Djava.ext.dir="BadJar" \ Main.javaFailure "$java" ${TESTVMOPTS} \ -Xbootclasspath:"$BCP${PS}BadJar/Lib.jar" \ -Djava.ext.dirs="GooJar" \ MainSuccess "$java" ${TESTVMOPTS} \ -Xbootclasspath:"$BCP${PS}GooJar/Lib.jar${PS}BadClass" \ -Djava.ext.dirs="BadJar" \ Main#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} \ -extdirs "GooClass${PS}BadZip" \ -cp "GooZip/Lib.zip" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -extdirs "BadClass${PS}GooZip${PS}BadJar" \ -cp "BadZip/Lib.zip" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -Djava.ext.dirs="GooZip${PS}BadJar" \ -classpath "BadZip/Lib.zip" \ Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} \ -J-Djava.ext.dirs="GooZip${PS}BadJar" \ -classpath "BadZip/Lib.zip" \ Main.javaFailure "$java" ${TESTVMOPTS} \ -Djava.ext.dirs="GooClass${PS}BadZip" \ -cp "GooZip/Lib.zip${PS}." \ MainSuccess "$java" ${TESTVMOPTS} \ -Djava.ext.dirs="GooZip${PS}BadJar" \ -cp "BadZip/Lib.zip${PS}." \ Main#----------------------------------------------------------------Failure "$javac" ${TESTTOOLVMOPTS} -classpath "BadClass${PS}GooClass" Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} -classpath "GooClass${PS}BadClass" Main.javaFailure "$java" ${TESTVMOPTS} -classpath "BadClass${PS}GooClass${PS}." MainSuccess "$java" ${TESTVMOPTS} -classpath "GooClass${PS}BadClass${PS}." MainFailure "$javac" ${TESTTOOLVMOPTS} -cp "BadJar/Lib.jar${PS}GooZip/Lib.zip" Main.javaSuccess "$javac" ${TESTTOOLVMOPTS} -cp "GooJar/Lib.jar${PS}BadZip/Lib.zip" Main.javaFailure "$java" ${TESTVMOPTS} -cp "BadJar/Lib.jar${PS}${PS}GooZip/Lib.zip" MainSuccess "$java" ${TESTVMOPTS} -cp "GooJar/Lib.jar${PS}${PS}BadZip/Lib.zip" MainFailure env CLASSPATH="BadZip/Lib.zip${PS}GooJar/Lib.jar" "$javac" ${TESTTOOLVMOPTS} Main.javaSuccess env CLASSPATH="GooZip/Lib.zip${PS}BadJar/Lib.jar" "$javac" ${TESTTOOLVMOPTS} Main.javaFailure env CLASSPATH="${PS}BadZip/Lib.zip${PS}GooJar/Lib.jar" "$java" ${TESTVMOPTS} MainSuccess env CLASSPATH="${PS}GooZip/Lib.zip${PS}BadJar/Lib.jar" "$java" ${TESTVMOPTS} Main#----------------------------------------------------------------# Check behavior of empty paths and empty path elements#----------------------------------------------------------------In() { cd "$1"; shift; "$@"; cd ..; }In GooClass Failure "$javac" ${TESTTOOLVMOPTS} -cp ".." ../Main.javaIn GooClass Failure "$java" ${TESTVMOPTS} -cp ".." Main# Unspecified classpath defaults to "."Sys mkdir OneDir; Sys cp -p Main.java GooClass/Lib.class OneDir/.In OneDir Success "$javac" ${TESTTOOLVMOPTS} Main.javaIn OneDir Success "$java" ${TESTVMOPTS} Main# Empty classpath elements mean "."In GooClass Success "$javac" ${TESTTOOLVMOPTS} -cp "${PS}.." ../Main.javaIn GooClass Success "$java" ${TESTVMOPTS} -cp "${PS}.." MainIn GooClass Success "$javac" ${TESTTOOLVMOPTS} -cp "..${PS}" ../Main.javaIn GooClass Success "$java" ${TESTVMOPTS} -cp "..${PS}" MainIn GooClass Success "$javac" ${TESTTOOLVMOPTS} -cp "..${PS}${PS}/xyzzy" ../Main.javaIn GooClass Success "$java" ${TESTVMOPTS} -cp "..${PS}${PS}/xyzzy" Main# All other empty path elements are ignored.In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -extdirs "" -cp ".." ../Main.javaIn GooJar Failure "$java" ${TESTVMOPTS} -Djava.ext.dirs="" -cp ".." MainIn GooJar Failure "$javac" ${TESTTOOLVMOPTS} -extdirs "${PS}" -cp ".." ../Main.javaIn GooJar Failure "$javac" ${TESTTOOLVMOPTS} -Djava.ext.dirs="${PS}" -cp ".." ../Main.javaIn GooJar Failure "$java" ${TESTVMOPTS} -Djava.ext.dirs="${PS}" -cp ".." MainIn GooJar Success "$javac" ${TESTTOOLVMOPTS} -extdirs "." -cp ".." ../Main.javaIn GooJar Success "$javac" ${TESTTOOLVMOPTS} -Djava.ext.dirs="." -cp ".." ../Main.javaIn GooJar Success "$java" ${TESTVMOPTS} -Djava.ext.dirs="." -cp ".." MainIn GooJar Failure "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="" -cp ".." ../Main.javaIn GooJar Failure "$javac" ${TESTTOOLVMOPTS} -Djava.endorsed.dirs="" -cp ".." ../Main.javaIn GooJar Failure "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="" -cp ".." MainIn GooJar Failure "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="${PS}" -cp ".." ../Main.javaIn GooJar Failure "$javac" ${TESTTOOLVMOPTS} -endorseddirs "${PS}" -cp ".." ../Main.javaIn GooJar Failure "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="${PS}" -cp ".." MainIn GooJar Success "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="." -cp ".." ../Main.javaIn GooJar Success "$javac" ${TESTTOOLVMOPTS} -Djava.endorsed.dirs="." -cp ".." ../Main.javaIn GooJar Success "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="." -cp ".." MainIn GooClass Failure "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/p: -cp ".." ../Main.javaIn GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath/p: -cp ".." MainIn GooClass Success "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/p:. -cp ".." ../Main.javaIn GooClass Success "$java" ${TESTVMOPTS} -Xbootclasspath/p:. -cp ".." MainIn GooClass Failure "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath:"$BCP" -cp ".." ../Main.javaIn GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath:"$BCP" -cp ".." MainIn GooClass Success "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath:"$BCP${PS}." -cp ".." ../Main.javaIn GooClass Success "$java" ${TESTVMOPTS} -Xbootclasspath:"$BCP${PS}." -cp ".." MainIn GooClass Failure "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/a: -cp ".." ../Main.javaIn GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath/a: -cp ".." MainIn GooClass Success "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/a:. -cp ".." ../Main.javaIn GooClass Success "$java" ${TESTVMOPTS} -Xbootclasspath/a:. -cp ".." MainCleanupBottom Line
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -