- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
(更新:感谢下面 Peter N 的评论。)
我有一个包含多个类的 java 包,因此其中包含多个文件。但是,我最初只想编译其中一个文件,这样我就可以用它来更新包中的其他类。它是其他类的工厂,因此依赖于它们——即。它有对它们的引用。
我一直在尝试使用 JavaCompile gradle task去做这个。因此,我阅读了 JavaCompile 的文档并尝试搜索示例,但似乎很少。我什至在 gradle forums 上发帖, 但到目前为止进展缓慢。
我能够使用 ant javac 任务轻松完成 ant 脚本所需的操作。但我想在 gradle 中完成它(并且不使用 ant.javac 方法 - 如果我必须这样做,我将只使用 ant)。
我已经创建了一个示例案例,其中只有两个源文件用于一个包中的两个类。
这两个文件都在一个名为 some.pkg 的包中,因此我们具有以下目录结构:
一级:
package some.pkg;
import some.pkg.*;
public class ClassOne {
public void doStuff() {
}
}
第二类:
package some.pkg;
import some.pkg.*;
public class ClassTwo {
public void ClassTwo() {
ClassOne cone = new ClassOne();
cone.doStuff();
}
}
如您所见,ClassTwo(我们要独立编译的类)依赖于 ClassOne。
ant 脚本是一个简单的例子:
<project>
<property name="build.dir" value="build"/>
<property name="lib.dir" value="lib"/>
<property name="src.dir" value="src/main/java"/>
<target name="generate" >
<mkdir dir="${build.dir}"/>
<javac source="1.6" target="1.6" srcdir="${src.dir}" destdir="${build.dir}"
debug="true" includeantruntime="false"
includes="some/pkg/ClassTwo.java">
</javac>
</target>
</project>
但在 gradle 中,我一直遇到 javac(或 JavaCompile 任务)找不到 ClassOne 的问题。就好像 sourcedir 没有指向它应该指向的位置——实际上就好像我只是在命令行上运行 javac 一样。我在想 gradle 'JavaCompile' 任务的 'source' 属性就像 ant 'srcdir' 属性一样工作,但事实并非如此。所以这是我目前正在尝试的 gradle 脚本:
apply plugin: 'java'
task compileOne (type: JavaCompile) {
source = sourceSets.main.java.srcDirs
include 'some/pkg/ClassTwo.java'
classpath = sourceSets.main.compileClasspath
destinationDir = sourceSets.main.output.classesDir
}
但结果是:
C:\test\>gradle generate
:generate
C:\test\src\main\java\some\pkg\ClassTwo.java:7: cannot find symbol
symbol : class ClassOne
location: class some.pkg.ClassTwo
ClassOne cone = new ClassOne();
^
C:\test\src\main\java\some\pkg\ClassTwo.java:7: cannot find symbol
symbol : class ClassOne
location: class some.pkg.ClassTwo
ClassOne cone = new ClassOne();
^
2 errors
:generate FAILED
那么如何在 gradle 中实现 ant javac 等效?
ant
javac 似乎有智慧去编译所有其他相关类,但我想对于 gradle JavaCompile 我需要设置一个 sourceSet 来做到这一点..不确定..
谢谢!
最佳答案
感谢与@PeterNiederwieser 在评论中对原始帖子的讨论,为了完整性,我将在此处提供答案。
要以与 ant javac 非常相似的方式使用 gradle JavaCompile 函数,您需要通过 options.compilerArgs
属性提供 sourcepath
编译器选项。因此,现在可以运行的gradle脚本如下:
apply plugin: 'java'
task compileOne (type: JavaCompile) {
source = sourceSets.main.java.srcDirs
include 'some/pkg/ClassTwo.java'
classpath = sourceSets.main.compileClasspath
destinationDir = sourceSets.main.output.classesDir
}
compileOne.options.compilerArgs = ["-sourcepath", "$projectDir/src/main/java"]
特别注意最后一行(唯一的区别),它允许所有的工作。其结果是它实际上会在构建时同时编译 ClassOne 和 ClassTwo - 而不是只尝试您指定的单个显式文件。任何其他类(不需要的)保持未编译 - 通过查看构建目录确认。
谢谢彼得!
关于java - 如何用gradle编译单个java文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19391872/
在 spring-security项目,在 build.gradle文件,以下插件可用: apply plugin: 'io.spring.nohttp' apply plugin: 'locks'
我正在尝试使用gradle任务作为“与操作系统无关的shell脚本”。我在编写构建文件的逻辑时没有问题,但是我希望能够从任何文件夹中运行它。 我的第一次尝试是在路径上放置一个带有build.gradl
我在同一目录下有三个具有不同名称的build.gradle dev.build.gradle uat.build.gradle prd.build.gradle 我有4期 “gradle build”
乡亲们 有谁知道如何使用gradle与自定义的build.gradle和settings.gradle一起运行-即两者在一起? 我认为我可以有一个自定义的build.gradle文件(-b标志)-但这
Gradle 配置有两个属性,称为 dependencies和 incoming .根据我的理解,我们可以通过 Gradle 依赖 block 向配置添加依赖,如下所示: dependencies {
我正在测试将我的工件推送到 Nexus Maven 存储库。我正在使用 gradle这样做。 gradle upload有什么区别和 gradle publish ? 最佳答案 目前gradle提供了
这里有一个类似的问题:Gradle properties not being read from ~/.gradle/gradle.properties,但它不能解决我的问题。 在我看来,gradle
如何检索 Gradle 本身的版本 以编程方式从 Gradle 插件中? 最佳答案 刚刚发现可以使用任何一种方法来解决它 getProject().getGradle().getGradleVersi
2 个 gradle 项目,A 和 B,其中 A 定义了对 B 的编译依赖。为 maven 和 gradle 项目启用了 JAR 的重新映射。我试过启用和禁用自定义工具模型。我在 init.d 目录下
如何从 gradle 运行另一个 gradle 脚本。我有多个 gradle 脚本可以在 /test 下运行测试目录。 /build.gradle使用要运行的测试 gradle 文件的名称调用。例如
我已经看到了多模块项目的不同布局,其中有些项目只有一个 build.gradle。而其他项目将有 build.gradle在根和 build.gradle在每个子项目中。我想知道有什么区别以及首选哪种
我对 Gradle 生命周期有一个基本的询问。我的项目是一个多模块项目。 我注意到以下命令: ./gradlew clean bignibou-server:run 不等于运行以下两个命令按顺序运行:
我有一个项目,其中包含一个子项目,如下所示: Root Project |----gradle.build |----SubProject |----|----gradle.build 这里的子项目包
我有 gradle 项目,我想向不使用 gradle 或 maven 等构建工具的项目添加依赖项。 目录结构如下: commonfolder\ gradleProject\ b
我想创建一个类来帮助我加载不同类型的属性(local.properties,gradle.properties,$GRADLE_HOME/gradle.properties,环境变量,系统属性和自定义
我有一个多模块项目,其目录结构如下: proj |-modA |-modB |-modMain \-modSysTest 依赖项是: modB -> modA modMain -> modB modM
我正在尝试创建一个可以在 --offline 模式下工作的 gradle 项目的副本。除了一个步骤,我已经自动化了所有步骤。我无法自动将插件 jar 下载到 gradle 缓存中。 我的离线分发通过指
基本上我想这样做: Use Gradle function from other gradle file 也就是说,从另一个 gradle 脚本中调用一个函数。问题是我的 build.gradle 在
我有一个简单的 gradle 插件,我想试用一下,但我不确定如何“请求”gradle 运行我的测试 这是我要修改的 block (在我的 gradle 构建文件的顶部) buildscript {
在 Android Studio 中创建项目时,我收到以下错误消息。 Failed to import new Gradle project: Could not install Gradle dis
我是一名优秀的程序员,十分优秀!