如何使用 gradle java-plugin 将一些 java 文件构建到一个 jar 中?

How to build some java files to one jar using gradle java-plugin?

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

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

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)
   }
}

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

  • 为了运行所有的测试和编译你的文件你只需要运行build任务,这取决于assemblecheck 这取决于其他任务,例如 testcompile 等。要使用它,您需要 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'
    }
}

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

apply plugin: 'java'

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

  test {
    java {
      srcDir 'src'
      include '**/*Tests.java'
    }
  }
}