2

我想用 gradle 将一些 java 文件编译成一个 jar 文件。
目标是将它们添加到 jar 中并检查测试的依赖关系。
Maven 应该集成 junit 库。
我还想应用某种过滤器来仅测试文件与文件夹位于同一目录中的*Tests.java
文件。build.gradlesrc

我的文件结构(不能更改文件夹或文件名):

src/eu/conflicts/Conflicts.java
src/eu/conflicts/ConflictsTests.java
src/eu/utils/BuggyUtils.java
src/eu/utils/BuggyUtilsTests.java

运行后gradle -b build.gradle jar我收到错误消息:Could not find the main method

apply plugin: 'java'

repositories {
   mavenCentral()
}

dependencies {
   testCompile 'junit:junit:4.12'
}

sourceSets {
   main {
      conflicts {
         srcDir = 'src/eu/conflicts'
      }
      utils {
         srcDir = 'src/eu/utils'
      }
   }

   test {
      conflicts {
         srcDir = 'src/eu/conflicts'
      }

      utils {
         srcDir = 'src/eu/utils'
      }
   }
}

jar {
   baseName = 'xy'
   version = '0.1'
   manifest {
      attributes("Implementation-Title": "xy",
                 "Implementation-Version": 0.1)
   }
}
4

2 回答 2

3

您的源集似乎不正确,如果您不担心正在构建的工件,您实际上不需要修改 jar 任务。

  • 要运行所有测试并编译您的文件,您只需要运行build任务,它取决于assemble其他check任务test,例如compile等。要使用它,您需要apply plugin: 'java'.

  • Gradle 将构建一个工件(如果您使用构建任务)编译所有你想要的,默认情况下将你的主要源打包到一个没有测试源的 jar 中。

  • Gradle 将运行通过注释发现的测试源中的所有测试(使用捆绑在构建任务中的测试任务)。

  • 您可以在脚本中使用 SourceSets{} 修改所有内容以指向非默认结构

试试这个:

sourceSets {
    main.java{ 
        srcDirs = ['src/eu/conflicts', 'src/eu/utils'] 
        include '**/*.java'
    }

    test.java{
        srcDirs = ['src/eu/conflicts', 'src/eu/utils'] 
        include  '**/*Tests.java'
    }
}
于 2017-06-01T14:56:08.563 回答
2

您的源集定义不正确。Java 插件仅支持源集中javaresources源类型。每个源集可以具有任意名称。如果您命名源集main,它将自定义 jar 任务按约定使用的源集。所以:

apply plugin: 'java'

sourceSets {
  main {
    java {
      srcDir 'src'
      exclude '**/*Tests.java'
    }
  }

  test {
    java {
      srcDir 'src'
      include '**/*Tests.java'
    }
  }
}
于 2017-06-01T16:02:33.417 回答