罐子找不到主要方法 - 连接到主类,但不能访问方法 [英] Jar Can't Find Main Method - Connected to main class, but can't access method

查看:176
本文介绍了罐子找不到主要方法 - 连接到主类,但不能访问方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直工作在Eclipse中的一个项目,一切都已经持续除了沿途的一些问题蚂蚁顺利。

I've been working on a project in Eclipse and everything's been going smooth except for some Ant issues along the way.

我的code编译完美,准确地做什么,我想要它做的,但是,当它在一个罐子里,我得到的错误:

My code compiles perfectly and does exactly what I want it to do, but, when it's in a jar, I get the error:

Exception in thread "main" java.lang.NoSuchMethodError: main

主要存在绝对的文件,所以我的猜测是,它与文件的构造方式来做。我一直在使用SuperCSV阅读一些Excel表我已经和构建了我的主类各地从网站的例子:的 http://supercsv.sourceforge.net/$c$cExamples_general.html 。这里是我的适应:

ExcelFile.java

package jab.jm.main;

import jab.jm.readers.FileManager;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;

import junit.framework.Test;

import org.supercsv.cellprocessor.constraint.StrMinMax;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanReader;
import org.supercsv.io.ICsvBeanReader;
import org.supercsv.prefs.CsvPreference;

class ReadingObjects {

    static final CellProcessor[] userProcessors = { null,
            new StrMinMax(0, 100), null, new StrMinMax(0, 100), null,
            new StrMinMax(0, 100), null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, new StrMinMax(0, 100), null,
            new StrMinMax(0, 100), null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null, null, null,
            null, null, null, null, null, null, null, null, null };


    public static void main(String[] args) throws Exception {
        ICsvBeanReader inFile = new CsvBeanReader(
                new FileReader(
                        "C:\\Users\\Justian\\workspaces\\LNConnectionCompiler\\src\\jab\\jm\\main\\Fred_Jewell.csv"),
                CsvPreference.EXCEL_PREFERENCE);
        try {
            final String[] header = { "title", "firstName", "middleName",
                    "lastName", "suffix", "email", "email2", "email3",
                    "businessStreet", "businessStreet2", "businessStreet3",
                    "businessCity", "businessState", "businessPostalCode",
                    "businessCountry", "homeStreet", "homeStreet2",
                    "homeStreet3", "homeCity", "homeState", "homePostalCode",
                    "homeCountry", "otherStreet", "otherStreet2",
                    "otherStreet3", "otherCity", "otherState",
                    "otherPostalCode", "otherCountry", "company", "department",
                    "jobTitle", "assistantPhone", "businessFax",
                    "businessPhone", "businessPhone2", "callback", "carPhone",
                    "companyMainPhone", "homeFax", "homePhone", "homePhone2",
                    "isdn", "mobilePhone", "otherFax", "otherPhone", "pager",
                    "primaryPhone", "radioPhone", "TTYTTDPhone", "telex",
                    "assistantName", "birthday", "managerName", "notes",
                    "otherPOBox", "spouse", "webPage", "personalWebPage" };
            ExcelFile file;
            while ((file = inFile.read(ExcelFile.class, header, userProcessors)) != null) {
                if (file.getCompany().indexOf("Jabian") >= 0)
                    System.out.println(file.getFirstName() + " " + file.getLastName());
            }
        } finally {
            inFile.close();
        }

        URL location = ExcelFile.class.getProtectionDomain().getCodeSource().getLocation();
        System.out.println(location.getFile());

    }
}

public class ExcelFile {
    private String title, firstName, middleName, lastName, suffix, email,
            email2, email3, businessStreet, businessStreet2, businessStreet3,
            businessCity, businessState, businessPostalCode, businessCountry,
            homeStreet, homeStreet2, homeStreet3, homeCity, homeState,
            homePostalCode, homeCountry, otherStreet, otherStreet2,
            otherStreet3, otherCity, otherState, otherPostalCode, otherCountry,
            company, department, jobTitle, assistantPhone, businessFax,
            businessPhone, businessPhone2, callback, carPhone,
            companyMainPhone, homeFax, homePhone, homePhone2, isdn,
            mobilePhone, otherFax, otherPhone, pager, primaryPhone, radioPhone,
            TTYTTDPhone, telex, assistantName, birthday, managerName, notes,
            otherPOBox, spouse, webPage, personalWebPage;

    public String getTitle() {
        return title;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getMiddleName() {
        return middleName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getSuffix() {
        return suffix;
    }

    public String getEmail() {
        return email;
    }

    public String getEmail2() {
        return email2;
    }

    public String getEmail3() {
        return email3;
    }

    public String getBusinessStreet() {
        return businessStreet;
    }

    public String getBusinessStreet2() {
        return businessStreet2;
    }

    public String getBusinessStreet3() {
        return businessStreet3;
    }

    public String getBusinessCity() {
        return businessCity;
    }

    public String getBusinessState() {
        return businessState;
    }

    public String getBusinessPostalCode() {
        return businessPostalCode;
    }

    public String getBusinessCountry() {
        return businessCountry;
    }

    public String getHomeStreet() {
        return homeStreet;
    }

    public String getHomeStreet2() {
        return homeStreet2;
    }

    public String getHomeStreet3() {
        return homeStreet3;
    }

    public String getHomeCity() {
        return homeCity;
    }

    public String getHomeState() {
        return homeState;
    }

    public String getHomePostalCode() {
        return homePostalCode;
    }

    public String getHomeCountry() {
        return homeCountry;
    }

    public String getOtherStreet() {
        return otherStreet;
    }

    public String getOtherStreet2() {
        return otherStreet2;
    }

    public String getOtherStreet3() {
        return otherStreet3;
    }

    public String getOtherCity() {
        return otherCity;
    }

    public String getOtherState() {
        return otherState;
    }

    public String getOtherPostalCode() {
        return otherPostalCode;
    }

    public String getOtherCountry() {
        return otherCountry;
    }

    public String getCompany() {
        return company;
    }

    public String getDepartment() {
        return department;
    }

    public String getJobTitle() {
        return jobTitle;
    }

    public String getAssistantPhone() {
        return assistantPhone;
    }

    public String getBusinessFax() {
        return businessFax;
    }

    public String getBusinessPhone() {
        return businessPhone;
    }

    public String getBusinessPhone2() {
        return businessPhone2;
    }

    public String getCallBack() {
        return callback;
    }

    public String getCarPhone() {
        return carPhone;
    }

    public String getCompanyMainPhone() {
        return companyMainPhone;
    }

    public String getHomeFax() {
        return homeFax;
    }

    public String getHomePhone() {
        return homePhone;
    }

    public String getHomePhone2() {
        return homePhone2;
    }

    public String getISDN() {
        return isdn;
    }

    public String getMobilePhone() {
        return mobilePhone;
    }

    public String getOtherFax() {
        return otherFax;
    }

    public String getOtherPhone() {
        return otherPhone;
    }

    public String getPager() {
        return pager;
    }

    public String getPrimaryPhone() {
        return primaryPhone;
    }

    public String getRadioPhone() {
        return radioPhone;
    }

    public String getTTYTTDPhone() {
        return TTYTTDPhone;
    }

    public String getTelex() {
        return telex;
    }

    public String getAssistantName() {
        return assistantName;
    }

    public String getBirthday() {
        return birthday;
    }

    public String getManagerName() {
        return managerName;
    }

    public String getNotes() {
        return notes;
    }

    public String getOtherPOBox() {
        return otherPOBox;
    }

    public String getSpouse() {
        return spouse;
    }

    public String getWebPage() {
        return webPage;
    }

    public String getPersonalWebPage() {
        return personalWebPage;
    }

    public void setTitle(final String title) {
        this.title = title;
    }

    public void setFirstName(final String firstName) {
        this.firstName = firstName;
    }

    public void setMiddleName(final String middleName) {
        this.middleName = middleName;
    }

    public void setLastName(final String lastName) {
        this.lastName = lastName;
    }

    public void setSuffix(final String suffix) {
        this.suffix = suffix;
    }

    public void setEmail(final String email) {
        this.email = email;
    }

    public void setEmail2(final String email2) {
        this.email2 = email2;
    }

    public void setEmail3(final String email3) {
        this.email3 = email3;
    }

    public void setBusinessStreet(final String businessStreet) {
        this.businessStreet = businessStreet;
    }

    public void setBusinessStreet2(final String businessStreet2) {
        this.businessStreet2 = businessStreet2;
    }

    public void setBusinessStreet3(final String businessStreet3) {
        this.businessStreet3 = businessStreet3;
    }

    public void setBusinessCity(final String businessCity) {
        this.businessCity = businessCity;
    }

    public void setBusinessState(final String businessState) {
        this.businessState = businessState;
    }

    public void setBusinessPostalCode(final String businessPostalCode) {
        this.businessPostalCode = businessPostalCode;
    }

    public void setBusinessCountry(final String businessCountry) {
        this.businessCountry = businessCountry;
    }

    public void setHomeStreet(final String homeStreet) {
        this.homeStreet = homeStreet;
    }

    public void setHomeStreet2(final String homeStreet2) {
        this.homeStreet2 = homeStreet2;
    }

    public void setHomeStreet3(final String homeStreet3) {
        this.homeStreet3 = homeStreet3;
    }

    public void setHomeCity(final String homeCity) {
        this.homeCity = homeCity;
    }

    public void setHomeState(final String homeState) {
        this.homeState = homeState;
    }

    public void setHomePostalCode(final String homePostalCode) {
        this.homePostalCode = homePostalCode;
    }

    public void setHomeCountry(final String homeCountry) {
        this.homeCountry = homeCountry;
    }

    public void setOtherStreet(final String otherStreet) {
        this.otherStreet = otherStreet;
    }

    public void setOtherStreet2(final String otherStreet2) {
        this.otherStreet2 = otherStreet2;
    }

    public void setOtherStreet3(final String otherStreet3) {
        this.otherStreet3 = otherStreet3;
    }

    public void setOtherCity(final String otherCity) {
        this.otherCity = otherCity;
    }

    public void setOtherState(final String otherState) {
        this.otherState = otherState;
    }

    public void setOtherPostalCode(final String otherPostalCode) {
        this.otherPostalCode = otherPostalCode;
    }

    public void setOtherCountry(final String otherCountry) {
        this.otherCountry = otherCountry;
    }

    public void setCompany(final String company) {
        this.company = company;
    }

    public void setDepartment(final String department) {
        this.department = department;
    }

    public void setJobTitle(final String jobTitle) {
        this.jobTitle = jobTitle;
    }

    public void setAssistantPhone(final String assistantPhone) {
        this.assistantPhone = assistantPhone;
    }

    public void setBusinessFax(final String businessFax) {
        this.businessFax = businessFax;
    }

    public void setBusinessPhone(final String businessPhone) {
        this.businessPhone = businessPhone;
    }

    public void setBusinessPhone2(final String businessPhone2) {
        this.businessPhone2 = businessPhone2;
    }

    public void setCallback(final String callback) {
        this.callback = callback;
    }

    public void setCarPhone(final String carPhone) {
        this.carPhone = carPhone;
    }

    public void setCompanyMainPhone(final String companyMainPhone) {
        this.companyMainPhone = companyMainPhone;
    }

    public void setHomeFax(final String homeFax) {
        this.homeFax = homeFax;
    }

    public void setHomePhone(final String homePhone) {
        this.homePhone = homePhone;
    }

    public void setHomePhone2(final String homePhone2) {
        this.homePhone2 = homePhone2;
    }

    public void setIsdn(final String isdn) {
        this.isdn = isdn;
    }

    public void setMobilePhone(final String mobilePhone) {
        this.mobilePhone = mobilePhone;
    }

    public void setOtherFax(final String otherFax) {
        this.otherFax = otherFax;
    }

    public void setOtherPhone(final String otherPhone) {
        this.otherPhone = otherPhone;
    }

    public void setPager(final String pager) {
        this.pager = pager;
    }

    public void setPrimaryPhone(final String primaryPhone) {
        this.primaryPhone = primaryPhone;
    }

    public void setRadioPhone(final String radioPhone) {
        this.radioPhone = radioPhone;
    }

    public void setTTYTTDPhone(final String TTYTTDPhone) {
        this.TTYTTDPhone = TTYTTDPhone;
    }

    public void setTelex(final String telex) {
        this.telex = telex;
    }

    public void setAssistantName(final String assistantName) {
        this.assistantName = assistantName;
    }

    public void setBirthday(final String birthday) {
        this.birthday = birthday;
    }

    public void setManagerName(final String managerName) {
        this.managerName = managerName;
    }

    public void setNotes(final String notes) {
        this.notes = notes;
    }

    public void setOtherPOBox(final String otherPOBox) {
        this.otherPOBox = otherPOBox;
    }

    public void setSpouse(final String spouse) {
        this.spouse = spouse;
    }

    public void setWebPage(final String webPage) {
        this.webPage = webPage;
    }

    public void setPersonalWebPage(final String personalWebPage) {
        this.personalWebPage = personalWebPage;
    }

}

这,在我心中,是一个贫穷的建筑,但它是完全可能的,这就是为什么我没有碰到编译任何问题。当然,因为它是这样一个不寻常的建筑,蚂蚁可能是有问题试图访问它。

This, in my mind, is a poor construction, but it is entirely possible and that's why I don't run into any issues compiling. Of course, because it's such an unusual construction, Ant may be having trouble trying to access it.

注意ExcelFile.Java包含非公共类ReadingObjects,其中包含的主要方法。我的理论是,因为ExcelFile.java不一定包含main方法的类中,我遇到了问题

让我知道你们的想法。我愿意给的东西了一枪。

Let me know what you guys think. I'm willing to give things a shot.

提前感谢!

-Justian

编辑:这是我的构建文件:

<?xml version="1.0" ?>

<project name="ServerJar" default="dist" basedir=".">
    <description>
        Builds client files into .jar
    </description>
    <!-- [build variables] -->
    <property name="src" location="src" />
    <property name="build" location="build" />
    <property name="dist" location="dist" />
    <property name="lib" location="lib" />
    <!-- [path to packages] -->
    <path id="master-classpath">
        <fileset dir="${lib}">
            <include name="*.jar"/>
        </fileset>
    </path>


    <target name="init">
        <!-- makes time stamp to be used in jar name -->
        <tstamp />
        <!-- creates build directory structure -->
        <mkdir dir="${build}" />
    </target>

    <target name="compile" depends="init" description="Compiles the source">
        <!-- compiles the java code from ${src} into ${build} -->
        <!-- <javac srcdir="${src}" destdir="${build}" /> -->
        <javac destdir= "${build}">
            <src path="${src}"/>
            <classpath refid="master-classpath"/>
        </javac>
    </target>

    <target name="dist" depends="compile" description="Generates distributable">
    <!-- creates the distribution directory -->
        <mkdir dir="${dist}/lib" />

        <!-- puts everything in ${build} into the jar file -->
        <jar jarfile="${dist}/lib/CC-${DSTAMP}.jar" basedir="${build}">
            <manifest>
                <attribute name="Main-Class" value="jab.jm.main.ExcelFile" />
            </manifest>
        </jar>

        <!-- makes a jar file for quick test execution -->
        <jar jarfile="${dist}/lib/CC.jar" basedir="${build}">
            <manifest>
                <attribute name="Main-Class" value="jab.jm.main.ExcelFile" />
            </manifest>
        </jar>
    </target>

    <target name="clean" description="Cleans up the extra build files">
        <!-- deletes the ${build} and ${dist} directories -->
        <delete dir="${build}" />
        <delete dir="${dist}" />
    </target>
</project>

编辑:任何东西没有运气。也许我们可以看看我重组一个文件分成两个?

我有点紧张,因为我不知道SuperCSV需要什么样的格式。

I'm a little nervous about that because I don't know what kind of format SuperCSV requires.

推荐答案

-cp (和 -classpath )论点的忽略当使用 -jar 参数。您需要在JAR的 MANIFEST.MF 文件中的类路径属性来指定的。

The -cp (and -classpath) arguments are ignored when using -jar argument. You need to specify it in the Class-Path attribute of JAR's MANIFEST.MF file.

我的蚂蚁是一种有点生疏,但它的东西就像那些行:

My ant is a bit rusty, but it's something like those lines:

<attribute name="Class-Path" value="${dist.classpath}"/>


更新您想按你的意见,知道如何直接使用Eclipse,而不是用Ant hassling做到这一点。首先,您需要使用<大骨节病>控制 + <大骨节病> F11 运行提出的的main()方法,然后单击鼠标右键项目,选择导出>运行的JAR文件的(注意可运行的部分,这是很重要的!)。然后,在向导,你必须从列表中选择相同的启动配置的(如果必要,选择库操作),然后单击的完成的。通过这种方式生成清单文件时,Eclipse将采取构建路径的详细信息自动地考虑进去。


Update as per your comments you'd like to know how to do this directly with Eclipse instead of hassling with Ant. First, you need to run the proposed main() method using Ctrl+F11 and then rightclick the project, choose Export > Runnable JAR file (note "Runnable" part, this is important!). Then, in the Wizard you have to choose the same Launch configuration from the list (and if necessary choose library handling) and then click Finish. This way Eclipse will take the buildpath details automagically into account when generating the MANIFEST file.

这篇关于罐子找不到主要方法 - 连接到主类,但不能访问方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆