如何创建JavaGradle项目

如何创建JavaGradle项目,java,gradle,Java,Gradle,如何从命令行创建JavaGradle项目 它应该创建如下图所示 更新: .1。从…起 我需要用两行代码创建文件build.gradle .2。添加到下面的build.gradle任务,然后执行gradle create dirs 任务“创建目录”不幸的是,您不能在一个命令中完成此任务。有一个开放的 现在你必须用手来做。如果您需要经常这样做,您可以创建一个项目框架,或者只准备您自己的项目框架,并在需要时复制它 编辑 上述JIRA问题已于2013年5月1日解决,并在1.7-rc-1中固定。上的文档

如何从命令行创建JavaGradle项目

它应该创建如下图所示

更新:

.1。从…起 我需要用两行代码创建文件
build.gradle

.2。添加到下面的
build.gradle
任务,然后执行
gradle create dirs


任务“创建目录”不幸的是,您不能在一个命令中完成此任务。有一个开放的

现在你必须用手来做。如果您需要经常这样做,您可以创建一个项目框架,或者只准备您自己的项目框架,并在需要时复制它

编辑


上述JIRA问题已于2013年5月1日解决,并在1.7-rc-1中固定。上的文档是可用的,尽管它表明此功能仍处于“孵化”生命周期中。

gradle的人正在尽最大努力解决我们的所有问题;-)。 他们最近(从1.9开始)添加了一个新特性(孵化):buildinit插件


请参阅:

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


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

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

Gradle发行版有一个包含大量示例的
samples
文件夹,还有
gradleinit--type basic
com,请参见。但它们都需要一些编辑

您也可以使用下面的命令,然后运行
gradleinitsourcefolders 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"
}
/*
*用于基本Java项目的NodeEclipse/Enide build.gradle模板
*   https://github.com/Nodeclipse/nodeclipse-1/blob/master/org.nodeclipse.enide.editors.gradle/docs/java/basic/build.gradle
*最初询问
*   http://stackoverflow.com/questions/14017364/how-to-create-java-gradle-project
*用法
*   1. 创建文件夹(或general Eclipse项目)并将此文件放入
*   2. 运行'gradle initSourceFolders eclipse'或'gradle initSourceFolders idea'`
*@作者Paul Verest;
*基于'gradle init--type basic',它不会创建源文件夹
*/
应用插件:“java”
应用插件:“eclipse”
应用插件:“创意”

task initSourceFolders{//add创建Java项目:创建一个新的项目目录,跳转到其中并执行

gradle init --type java-library

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

我可以在
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。我将这个示例放在

上,我刚刚使用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

在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,而且是eclipse的超级粉丝,但普通的家伙,这意味着没有人测试Neon。1对于最简单的用例……导入gradle项目。 这还不够好。 我正在为gradle项目切换到Intellij:


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

  • 应用程序具有外部jar依赖项
  • 创建一个可运行的胖jar,并将所有依赖类复制到该jar
  • 创建一个可运行的jar,将所有依赖库复制到“dependencies”目录,并在清单中添加类路径
  • 以下是解决方案:

    • 安装最新的gradle(检查gradle--版本。我使用的是gradle 6.6.1)
    • 创建文件夹并打开终端
    • 执行
      gradleinit——键入java应用程序
    • 在命令行中添加所需的数据
    • 将项目导入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"
    }
    
    这是完整的构建

    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"
    }
    
    渐变生成命令
    创建fat jar:
    gradle fatJar

    复制依赖项:
    渐变复制依赖项

    创建具有依赖项的可运行jar:
    gradle createJar


    此处可以阅读更多详细信息:

    这不会创建源文件夹。如果以前没有创建源文件夹,Eclipse配置将不会满。不过,非常感谢您,作为步骤3添加。正如其他答案中提到的,有关build init插件的文档可以在此处找到:非常好。@Mike在Eclipse中,在执行此操作之前,java project必须转换为gradle项目。那么,我如何自动设置源文件夹?一个重要的问题。你必须有包含init插件的gradle版本。我花了很多时间来找出我的gradle有什么问题。使用
    mkdir-p src/{main,test}/{java,resources}
    gradle wrapper--gradle version 4.1 init--type java library
    如果你想指定wrapper版本,你知道IntelliJ java项目框架的等价物吗?我想答案显然在上面…\u或其他IDE插件配置的对应字符串。\u:=)问题是:如何从逗号创建java gradle项目nd行?在这个上下文中有帮助有什么问题?Paul?它在同一个上下文中。那么,为什么不说明eclipse当前在导入它时有问题呢。
    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"
    }
    
    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"
    }