#!/bin/sh # # Copyright (c) 2003, 2011, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # # @test # @bug 4212732 # @summary Test handling of the Class-Path attribute in jar file manifests # @author Martin Buchholz # # @run shell Class-Path.sh # To run this test manually, simply do ./Class-Path.sh . ${TESTSRC-.}/Util.sh set -u Cleanup() { Sys rm -rf pkg Main.java Main.class Main.jar jars Sys rm -rf MANIFEST.MF A.jar B.zip } Cleanup Sys mkdir pkg #---------------------------------------------------------------- # Create mutually referential jar files #---------------------------------------------------------------- cat >pkg/A.java <pkg/B.java <Main.java <> MANIFEST.MF Sys "$jar" cmf MANIFEST.MF Main.jar Main.class Success "$java" ${TESTVMOPTS} -jar Main.jar MkManifestWithClassPath "." Sys "$jar" cmf MANIFEST.MF A.jar pkg/A.class Success "$javac" ${TESTTOOLVMOPTS} -cp "A.jar" Main.java Success "$java" ${TESTVMOPTS} -jar Main.jar MkManifestWithClassPath "" Sys "$jar" cmf MANIFEST.MF A.jar pkg/A.class Failure "$javac" ${TESTTOOLVMOPTS} -cp "A.jar" Main.java Failure "$java" ${TESTVMOPTS} -jar Main.jar #---------------------------------------------------------------- # Test new flag -e (application entry point) #---------------------------------------------------------------- cat > Hello.java < Bye.java <> MANIFEST.MF # test for error: " 'e' flag and manifest with the 'Main-Class' # attribute cannot be specified together, during creation Failure "$jar" cmfe MANIFEST.MF "Bye.jar" "Bye" Bye.class # test for overriding the manifest when updating the jar # Success "$jar" cfe "greetings.jar" "Hello" Hello.class Success "$jar" ufe "greetings.jar" "Bye" Bye.class Success "$java" ${TESTVMOPTS} -jar greetings.jar # test for error: " 'e' flag and manifest with the 'Main-Class' # attribute cannot be specified together, during update Failure "$jar" umfe MANIFEST.MF "greetings.jar" "Hello" # test jar updation when there are no inputfiles # Success "$jar" ufe "Hello.jar" "Bye" Failure "$java" ${TESTVMOPTS} -jar Hello.jar Success "$jar" umf MANIFEST.MF "Hello.jar" # test creating jar when the to-be-archived files # do not contain the specified main class, there is no check done # for the presence of the main class, so the test will pass # Success "$jar" cfe "Hello.jar" "Hello" Bye.class # Jar creation and update when there is no manifest and inputfiles # specified Failure "$jar" cvf "A.jar" Failure "$jar" uvf "A.jar" # error: no such file or directory Failure "$jar" cvf "A.jar" non-existing.file Failure "$jar" uvf "A.jar" non-existing.file Cleanup Bottom Line