运行使用Gradle构建的JAR文件时,“没有主清单属性”

时间:2015-07-06 11:46:36

标签: java jar gradle manifest main

我使用Gradle编写了一个小型Java应用程序来构建它。该应用程序来自this tutorial,包含2个类:HelloWorld(主类)和Greeter。 from matplotlib import style from matplotlib import pylab as plt import numpy as np import pandas as pd style.use('ggplot') filename='total_watt.csv' date=[] number=[] import csv with open(filename, 'rb') as csvfile: df = pd.read_csv('total_watt.csv', parse_dates=[0], index_col=[0]) df.resample('1D', how='sum') for row in df: if len(row) == 2 : date.append(row[0]) number.append(row[1]) number=np.array(number) import datetime for ii in range(len(date)): date[ii]=datetime.datetime.strptime(date[ii], '%Y-%m-%d %H:%M:%S') plt.plot(date,number) plt.title('Example') plt.ylabel('Y axis') plt.xlabel('X axis') plt.show() 文件包含2个部分(以及其他部分,目前无关紧要):

build.gradle

apply plugin: 'application'
mainClassName = 'hello.HelloWorld'

(这是必要的,因为HelloWorld类导入了org.joda.time.LocalTime类)。 我可以使用dependencies { compile "joda-time:joda-time:2.2" } 构建应用,并使用gradle build运行它。一切都很好,我得到了结果。但是,当我尝试使用gradle run运行它时,我收到错误java -jar HelloWorld.jar。 StackOverflow上的解决方案之一建议将文件作为

运行
No main manifest attribute

java -cp HelloWorld.jar hello.HelloWorld

第一个返回java -cp HelloWorld.jar HelloWorld ,第二个返回Could not find or load main class HelloWorld。 JAR存档包含以下文件:

java.lang.NotClassDefFoundError" org/joda/time/LocalTime

我不知道为什么gradle不会将有关主类的信息放入清单文件中。你有什么建议吗?代码直接来自教程,所以应该没问题,但事实并非如此。我再说一遍,通过gradle运行应用程序没有任何问题。

1 个答案:

答案 0 :(得分:2)

发生此错误是因为在运行org.joda.time.LocalTime时未将hello.HelloWorld添加到类路径中。

  1. 可以使用以下设置的类路径运行:gradle run
  2. 您可以使用this插件在jar中包含此依赖项。
  3. 或者使用distZip任务准备分发,解压缩并使用sh或bat脚本运行准备好的工件。