集册 Java实例教程 执行Jar文件

执行Jar文件

欢马劈雪     最近更新时间:2020-01-02 10:19:05

525
执行Jar文件
/* from 
时代Java公众号 - nowjava.com*/

/*

 * Copyright @ 2006-2010 by The Jxva Framework Foundation

 * 

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 * 

 *      http://www.apache.org/licenses/LICENSE-2.0

 * 

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */

//package com.nowjava;

import java.io.File;


import java.io.IOException;


import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.ArrayList;


import java.util.jar.Attributes;


import java.util.jar.JarFile;


import java.util.jar.Manifest;


import java.util.zip.ZipFile;


public class Main {

    public static void exec(File jarFile, ArrayList<?> argsList,/** nowjava.com - 时代Java 提供 **/

            ClassLoader classLoader) throws IOException,

            ClassNotFoundException, SecurityException,

            NoSuchMethodException, IllegalArgumentException,

            IllegalAccessException, InvocationTargetException {

        String[] args = (String[]) argsList.toArray(new String[argsList

                .size()]);

        exec(jarFile, args, classLoader);

    }


    public static void exec(File jarFile, String[] args,

            ClassLoader classLoader) throws IOException,

            ClassNotFoundException, SecurityException,

            NoSuchMethodException, IllegalArgumentException,

            IllegalAccessException, InvocationTargetException {

        String mainClassName = getMainClassName(jarFile);

        if (mainClassName == null) {

            throw new ClassNotFoundException(

                    "Unable to extract name of Main-Class of "

                            + jarFile.getAbsolutePath());

        }

        Class<?> mainClass = classLoader.loadClass(mainClassName);

        Method mainMethod = mainClass.getMethod("main",

                new Class[] { String[].class });

        mainMethod.invoke(null, new Object[] { args });

    }


    /**

     * Extracts the name of the main class from the given jar file.

     * 

     * @param jarFile the jar file

     * @return the name of the main class from the given jar file, null when the jar does not have a manifest.

     * @throws IOException when the jar file could not be read

     */

    public static String getMainClassName(File jarFile) throws IOException {

        if (!jarFile.exists()) {

            throw new IllegalArgumentException(
展开阅读全文