如何创建Java gradle项目

时间:2012-12-24 05:17:26

标签: java gradle

如何从命令行创建Java Gradle项目?

它应该如下图所示创建standard maven folder layout

Java Gradle created with Eclipse plugin

更新:

0.1。来自http://www.gradle.org/docs/current/userguide/tutorial_java_projects.html 我需要用2行

创建文件build.gradle
apply plugin: 'java'
apply plugin: 'eclipse'

0.2。添加到下面的build.gradle任务,而不是执行gradle create-dirs

task "create-dirs" << {
   sourceSets*.java.srcDirs*.each { it.mkdirs() }
   sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}

0.3。然后运行gradle eclipse(或配置的其他IDE插件的相应字符串)

那么有没有办法在一个命令中完成它?

8 个答案:

答案 0 :(得分:269)

创建Java项目:创建一个新项目目录,跳转到该项目并执行

gradle init --type java-library

将构建源文件夹和Gradle构建文件(包括包装器)。

答案 1 :(得分:18)

gradle家伙正在尽最大努力解决所有(y)我们的问题;-)。 他们最近(从1.9开始)添加了一个新功能(孵化):“build init”插件。

请参阅:build init plugin documentation

答案 2 :(得分:12)

不幸的是,你无法在一个命令中执行此操作。有一个开放的issue for the very feature

目前你必须手工完成。如果您需要经常这样做,您可以创建custom gradle plugin,或者只是准备自己的项目框架并在需要时复制它。

修改

上述JIRA问题已于2013年5月1日解决,并已修订为1.7-rc-1。 Build Init Plugin上的文档可用,但它表明此功能仍处于“孵化”生命周期中。

答案 3 :(得分:12)

最后在比较了所有解决方案后,我认为从build.gradle文件开始可以很方便。

Gradle分发包含samples个文件夹,其中包含大量示例,并且gradle init --type basic个命令请参阅Chapter 47. Build Init Plugin。但他们都需要一些编辑。

您也可以使用下面的template,然后运行gradle initSourceFolders eclipse

/*
* Nodeclipse/Enide build.gradle template for basic Java project
*   https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.enide.editors.gradle/docs/java/basic/build.gradle
* Initially asked on
*   http://stackoverflow.com/questions/14017364/how-to-create-java-gradle-project
* Usage
*   1. create folder (or general Eclipse project) and put this file inside
*   2. run `gradle initSourceFolders eclipse` or `gradle initSourceFolders idea`
* @author Paul Verest; 
* based on `gradle init --type basic`, that does not create source folders 
*/

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

task initSourceFolders { // add << before { to prevent executing during configuration phase
   sourceSets*.java.srcDirs*.each { it.mkdirs() }
   sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.11'
}

// In this section you declare where to find the dependencies of your project
repositories {
    // Use Maven Central for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    mavenCentral()
}

// In this section you declare the dependencies for your production and test code
dependencies {
    //compile fileTree(dir: 'libs', include: '*.jar')
    // The production code uses the SLF4J logging API at compile time
    //compile 'org.slf4j:slf4j-api:1.7.5'

    // Declare the dependency for your favourite test framework you want to use in your tests.
    // TestNG is also supported by the Gradle Test task. Just change the
    // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
    // 'test.useTestNG()' to your build script.
    testCompile "junit:junit:4.11"
}

结果如下。

overview

可以在没有Eclipse的任何Gradle插件的情况下使用它,
或使用(Enide) Gradle for Eclipse, Jetty, Android替代Gradle Integration for Eclipse

editbox

答案 4 :(得分:1)

如果您正在使用Eclipse,对于现有项目(具有build.gradle文件),您只需键入gradle eclipse即可为该项目创建所有Eclipse文件和文件夹。

它会为您处理所有依赖项,并将它们添加到Eclipse中的项目资源路径中。

答案 5 :(得分:1)

我可以使用build.gradle中的groovy方法来处理它,为java,资源和测试创建所有源文件夹。然后我将其设置为在gradle eclipse任务之前运行。

eclipseClasspath.doFirst {
    initSourceFolders()
}

def initSourceFolders() {
    sourceSets*.java.srcDirs*.each { it.mkdirs() }
    sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}

现在我们可以使用一个命令设置一个新的gradle Java EE项目来进行eclipse。我把这个例子放在GitHub

答案 6 :(得分:0)

这是对我有用的。.我想用gradle创建一个hello world java应用程序,并满足以下要求。

  1. 该应用程序具有外部jar依赖项
  2. 创建一个可运行的胖子缸,并将所有相关类复制到该子缸中
  3. 创建一个将所有依赖库复制到目录“ dependencies”的可运行jar,并将类路径添加到清单中。

这是解决方法:

  • 安装最新的gradle(检查gradle --version。我使用gradle 6.6.1)
  • 创建一个文件夹并打开一个终端
  • 执行gradle init --type java-application
  • 在命令行中添加所需的数据
  • 将项目导入IDE(IntelliJ或Eclipse)
  • 使用以下任务编辑build.gradle文件。

可运行的脂肪罐

task fatJar(type: Jar) {
 clean
 println("Creating fat jar")
 manifest {
    attributes 'Main-Class': 'com.abc.gradle.hello.App'
 }
 archiveName "${runnableJar}"
 from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
 } with jar
 println("Fat jar is created")
}

复制依赖项

task copyDepends(type: Copy) {
   from configurations.default
   into "${dependsDir}"
}

使用清单中的类路径依赖项创建jar

task createJar(type: Jar) {
   println("Cleaning...")
   clean
   manifest {
    attributes('Main-Class': 'com.abc.gradle.hello.App',
            'Class-Path': configurations.default.collect { 'dependencies/' + 
             it.getName() }.join(' ')
    )
}
  from {
      configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  } with jar
  println "${outputJar} created"
}

这是完整的build.gradle

plugins {
    id 'java'
   id 'application'
}
repositories {
    mavenCentral()
}
dependencies {
  implementation 'org.slf4j:slf4j-api:1.7.30'
  implementation 'ch.qos.logback:logback-classic:1.2.3'
  implementation 'ch.qos.logback:logback-core:1.2.3'
  testImplementation 'junit:junit:4.13'
}
def outputJar = "${buildDir}/libs/${rootProject.name}.jar"
def dependsDir = "${buildDir}/libs/dependencies/"
def runnableJar = "${rootProject.name}_fat.jar";

//Create runnable fat jar
task fatJar(type: Jar) {
   clean
   println("Creating fat jar")
   manifest {
    attributes 'Main-Class': 'com.abc.gradle.hello.App'
  }
  archiveName "${runnableJar}"
  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
  } with jar
  println("Fat jar is created")
}

//Copy dependent libraries to directory.
task copyDepends(type: Copy) {
 from configurations.default
 into "${dependsDir}"
}

//Create runnable jar with dependencies
task createJar(type: Jar) {
 println("Cleaning...")
 clean
 manifest {
    attributes('Main-Class': 'com.abc.gradle.hello.App',
            'Class-Path': configurations.default.collect { 'dependencies/' + 
            it.getName() }.join(' ')
    )
 }
 from {
     configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
 } with jar
  println "${outputJar} created"
}

Gradle构建命令
创建胖子罐:gradle fatJar
复制依赖项:gradle copyDepends
创建具有依赖项的可运行jar:gradle createJar

更多详细信息,请点击此处:https://jafarmlp.medium.com/a-simple-java-project-with-gradle-2c323ae0e43d

答案 7 :(得分:-1)

我刚试过Eclipse Neon.1和Gradle:

------------------------------------------------------------
Gradle 3.2.1
------------------------------------------------------------

Build time:   2016-11-22 15:19:54 UTC
Revision:     83b485b914fd4f335ad0e66af9d14aad458d2cc5

Groovy:       2.4.7
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_112 (Oracle Corporation 25.112-b15)
OS:           Windows 10 10.0 amd64

enter image description here

在带有Java版本的Windows 10上:

C:\FDriveKambiz\repo\gradle-gen-project>java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)

正如你在Eclipse中看到的那样,它失败了。 但是在Intellij中像一只飙升的老鹰一样航行......我不知道Intellij,并且是日食的忠实粉丝,但是普通的家伙,这意味着没有一个测试Neon.1用于最简单的用例......导入一个gradle项目。 这还不够好。 我正在转向Intellij进行gradle项目:

enter image description here