为什么这个gradle构建脚本不编译java类?

时间:2013-09-11 13:36:42

标签: gradle cascading

我正在尝试在我的Hadoop项目中使用Cascading。我正在尝试实现Enterprise Data Workflows with Cascading书中给出的第一个例子。我编写了包含Cascading相关代码的java类,我有另一个build.graddle文件,它应该编译该java类并从中构建jar文件。

我的文件夹结构如下:

  • main_folder

    • 不耐烦

      • Main.java
      • 的build.gradle

我的build.gradle文件如下所示:

apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'eclipse'

archivesBaseName = 'impatient'
repositories {
    mavenLocal()
    mavenCentral()
    mavenRepo name: 'conjars', url: 'http://conjars.org/repo/'
}
ext.cascadingVersion = '2.1.0'
dependencies {
    compile( group: 'cascading', name: 'cascading-core', version: cascadingVersion )
    compile( group: 'cascading', name: 'cascading-hadoop', version: cascadingVersion )
}
jar {
    description = "Assembles a Hadoop ready jar file"
    doFirst {
        into( 'lib' ) {
            from configurations.compile
        }
    }
    manifest {
        attributes( "Main-Class": "impatient/Main" )
    }
}

当我从命令提示符运行gradle clean jar命令时,我获得了构建成功的消息。我尝试使用

运行此jar文件

hadoop jar impatient.jar <input file path> <output file path>

命令,但它给了我Exception in thread "main" java.lang.ClassNotFoundException: impatient.Main例外。

所以我检查了jar文件的contentes,发现那个jar不包含impatient/Main.class文件。

请注意我对gradle一无所知

请某人请告诉我gradle脚本是否有任何问题,或者我犯了一些错误。

谢谢!!!

1 个答案:

答案 0 :(得分:9)

将源文件移至

main_folder/impatient/src/main/java/Main.java

但请将build.gradle文件留在原处。

默认情况下,Gradle使用src/main/javasrc/test/java来查找生产和测试java源代码(相对于根文件夹,在您的情况下为impatient