Java 即使指定了正确的主类、类路径等,Jar也不会运行

Java 即使指定了正确的主类、类路径等,Jar也不会运行,java,eclipse,jar,ant,Java,Eclipse,Jar,Ant,我的构建使用下面的build.xml文件进行编译并完美运行 唯一的问题是我创建了一个jar,但它在没有给出无法找到或加载主类的错误的情况下无法运行 我已经在常见的找不到或加载主类错误上阅读了几个堆栈溢出的答案。然而,我无法在下面的build.xml中发现我做错了什么 build.xml <?xml version="1.0" encoding="UTF-8"?> <project default="run" name="My Project "> <target

我的构建使用下面的
build.xml
文件进行编译并完美运行

唯一的问题是我创建了一个jar,但它在没有给出
无法找到或加载主类的
错误的情况下无法运行

我已经在常见的
找不到或加载主类
错误上阅读了几个堆栈溢出的答案。然而,我无法在下面的
build.xml
中发现我做错了什么

build.xml

<?xml version="1.0" encoding="UTF-8"?>

<project default="run" name="My Project ">

<target name="run" depends="createjar">
    <java classname="com.company.program.project.MyMainClass">
        <classpath path="staging">
            <fileset dir="C:\COMPANY\Eclipse\3.6-64\plugins">
              <include name="org.eclipse.swt.*.jar" />
            </fileset>
        </classpath>
    </java>
</target>

<target name="createjar" depends="compile">
  <jar destfile="./builds/jars/swtgui.jar" basedir="./staging/com/company/program/project" filesetmanifest="mergewithoutmain">
    <manifest>
      <attribute name="Main-Class" value="com.company.program.project.MyMainClass" />
    </manifest>

    <!-- 
        <fileset dir="./bin/com/company/program/project" includes="./*.class" />
    -->
    <fileset dir="C:\COMPANY\Eclipse\3.6-64\plugins\" includes="org.eclipse.swt.win32.win32.x86_64_3.6.0.v3650b.jar" />
  </jar>
</target>

<target name="compile">
    <javac includeantruntime="false" srcdir="./src" destdir="staging">
        <classpath>
             <fileset dir="C:\COMPANY\Eclipse\3.6-64\plugins">
              <include name="org.eclipse.swt.*.jar" />
            </fileset>
        </classpath>
    </javac>

</target>

<record name="./MyMainClass.log" loglevel="verbose" action="start"/>
已正确指定主类。已正确指定类路径(basedir)。它在编译完成之前等待执行。等等

我在下面留下了我的日志文件,但它似乎没有给出任何关于为什么找不到我的主类的线索。有人发现上述两个文件有什么问题吗?

是否尝试了eclipse-->导出-->可运行jar文件选项


当我试图从我的测试swing应用程序手动创建一个jar时,我也遇到了这个问题。但是当我尝试这个选项时,它起了作用。
jar
任务的
basedir
属性应该与
javac
任务的
destdir
属性匹配

javac
任务编写为

<javac includeantruntime="false" srcdir="./src" destdir="staging">
<jar destfile="./builds/jars/swtgui.jar" basedir="staging" filesetmanifest="mergewithoutmain">

由于您的包被定义为
com.company.program.project
,Java编译器和JVM希望您的类位于
com/company/program/project
文件夹中,但是您当前的
jar
任务将它们放入jar文件的根文件夹。

我相信您的jar文件具有类似src/com/xxx的结构……内部结构应该是com/asd/。。尝试将basedir=“./staging/com/company/program/project”更改为basedir=“./staging/com/company/program/project/”非常好。这使得它通过了
无法找到或加载主类错误。
但它无法看到单独的库(SWT)。
<jar destfile="./builds/jars/swtgui.jar" basedir="staging" filesetmanifest="mergewithoutmain">