我已经将一个Java项目编译到一个Jar文件中,并且在运行它时遇到了问题。
当我跑步时:
java -jar myJar.jar
我收到以下错误
Could not find the main class: myClass
该类文件不在jar的根目录中,因此我尝试更改主类的路径以使其与该类文件的路径匹配,并且遇到相同的问题。
我应该展平文件结构吗?如果是这样,我该怎么做。如果有任何用途,我正在使用Ant来构建Jar文件。
更新
这是jar的内容以及相关的Ant部分,我将我工作的公司的名称更改为“ org”:
META-INF/ META-INF/MANIFEST.MF dataAccessLayer/ dataAccessLayer/databaseTest.class org/ org/eventService/ org/eventService/DatabaseObject.class org/eventService/DatabaseObjectFactory.class org/eventService/DbEventClientImpl$HearBeatMonitor.class org/eventService/DbEventClientImpl.class org/eventService/EmptyQueryListException.class org/eventService/EventHandlerWorkItem.class org/eventService/EventProcessor.class org/eventService/EventTypeEnum.class org/eventService/EventWorkQueue$MonitorThread.class org/eventService/EventWorkQueue$PoolWorker.class org/eventService/EventWorkQueue.class org/eventService/FailedToLoadDriverException.class org/eventService/IConnectionFailureListener.class org/eventService/InvalidEventTypeException.class org/eventService/JdbcInterfaceConnection.class org/eventService/NullArgumentException.class org/eventService/OracleDatabaseObject.class org/eventService/ProactiveClientEventLogger.class org/eventService/ProactiveClientEventLoggerException.class org/eventService/PropertyMap.class org/eventService/SQLServerDatabaseObject.class org/eventService/TestHarness.class org/eventService/Utilities.class
和蚂蚁的目标:
<target name="compile" depends="init" description="compile the source "> <javac srcdir="src" destdir="bin" classpathref="project.class.path"/> </target> <target name="buildjar" description="build jar file" depends="compile"> <mkdir dir="dist"/> <jar destfile="dist/myJar.jar" basedir="bin" includes="**/*.class" > <manifest> <attribute name="Main-Class" value="org.eventService.ProactiveClientEventLogger"/> </manifest> </jar> </target>
在清单文件中,确保将属性Main- Class设置为包含您的main()方法的类的名称。例如,如果类的包限定名称为my.cool.Class,Main- Class则应在您的JAR清单中将其设置为my.cool.Class。
Main- Class
main()
my.cool.Class
还要确保.java文件中有一个包声明(例如,在中Class.java,请确保具有正确的package my.cool;声明)。另外,请确保您的目录层次结构设置正确(my.cool.Class应位于中$SRC/my/cool/Class.java)。
.java
Class.java
package my.cool;
$SRC/my/cool/Class.java