gpt4 book ai didi

java - Gradle 自定义构建

转载 作者:行者123 更新时间:2023-11-30 03:40:36 25 4
gpt4 key购买 nike

我有一个包含多个模块的项目,这些模块的源代码位于不同的文件夹中。我想将这些独立模块的构建作为 gradle 构建脚本的任务。

/.
/abc/MyTest.java
/lib/<empty>
/build.gradle

构建.gradle:

apply plugin: "java"

dependencies { compile "javax.jms:jms:1.1" }

defaultTasks 'compileIt'

task compileIt (type: JavaCompile) {
source = files("abc/MyTest.java")
classpath = files("lib")
destinationDir = file('classes')
}

MyTest.java:

package abc;       
public class MyTest {
public static void main(String[] argv) throws javax.jms.JMSException {
throw new javax.jms.JMSException("JMS test!");
}
}

运行 gradle 时出现以下错误:

C:\Develop\Java\....\MyTest.java:3: error:
package javax.jms does not exist
public static void main(String[] argv) throws javax.jms.JMSException

似乎没有使用任何依赖项。

将“<<”放入任务

task compileIt (type: JavaCompile) << {

我得到了:

C:\Develop\Java\.....>gradle
:compileIt UP-TO-DATE
BUILD SUCCESSFUL
Total time: 4.296 secs

但到目前为止还没有采取任何行动...

问题出在哪里?非常感谢!

最佳答案

解决方案是删除java插件的使用并添加编译配置:

configurations {
compile
}

然后设置classpath像这样:

classpath = configurations.compile

设置 sourceCompatibility , targetCompatibilitydependencyCacheDir对于compileIt需要,它按预期工作。

编辑-------------------------------------

正如与 @Peter Niederwieser 讨论的那样,更好的是自定义 java插件:

  1. 更改默认构建的配置:

    sourceSets {
    main {
    java {
    srcDirs = ['abc']
    }
    }
    ...
    }

此外,您可以更改构建目录:

    compileJava {
destinationDir = file(project.get("build.binaries.dir"))
}
  • 为第二次构建添加新任务

    sourceSets {
    ...
    compileTwo {
    java {
    srcDirs = ['abc2']
    }
    }
    }
    ...
    task compileTwo(type: JavaCompile) {
    source = sourceSets.compileTwo.allSource.srcDirs
    destinationDir = file('classes')
    classpath = configurations.compile
    }
  • 关于java - Gradle 自定义构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26889162/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com