Build 我如何使用gradle来构建我的项目,无论有没有评测方面?

Build 我如何使用gradle来构建我的项目,无论有没有评测方面?,build,aspectj,gradle,Build,Aspectj,Gradle,我们已经开发了一些分析方面,我们希望在测试构建中包含这些方面,但不希望在生产构建中包含这些方面。我正在寻找构建build.gradle文件和源目录的最佳实践方法 我最初的想法是创建一个compileJavaAJ任务和一个依赖于compileJavaAJ的jarAJ任务。compileJavaAJ看起来与aspectJ插件中定义的compileJava非常相似。应用这个插件的问题在于它完全取代了compileJava(即使用javac的插件)。我需要两个构建目标-一个使用javac,另一个使用aj

我们已经开发了一些分析方面,我们希望在测试构建中包含这些方面,但不希望在生产构建中包含这些方面。我正在寻找构建build.gradle文件和源目录的最佳实践方法

我最初的想法是创建一个compileJavaAJ任务和一个依赖于compileJavaAJ的jarAJ任务。compileJavaAJ看起来与aspectJ插件中定义的compileJava非常相似。应用这个插件的问题在于它完全取代了compileJava(即使用javac的插件)。我需要两个构建目标-一个使用javac,另一个使用ajc。不过,如果有更好的方法,我欢迎大家提出建议

接下来,我需要决定将aspectJ代码放在哪里。我不想把它放在src/main/java中,因为java编译器会阻塞它。因此,我正在考虑定义一个新的源代码集src/main/aspectJ,它只有compileJavaAJ知道。虽然SourceSet应该为java代码建模,但我不确定这是否是正确的方法


非常感谢您的任何意见。谢谢

我会使用类似“withAspectJ”的属性来区分编译时使用方面和不使用方面。请查看以下代码段:

if(project.hasProperty('withAspectj') && project.getProperty("withAspectj")){
    sourceSets {
        main {
            java {
                srcDir 'src/main/aspectj'
            }
        }
    }
}
如果名为withAspectj的属性的计算结果为true,则此代码段会将目录src/main/aspectj添加到主源集中。现在,您可以将所有方面放入这个特定目录中。如果不传递withAspectj属性,则替换的compileJava任务将编译您的代码,而无需将方面连接到其中。 但是如果从命令行运行构建: 渐变构建-PwithAspectj=true

位于src/main/aspectj中的所有方面都将连接到您的代码中

希望有帮助

问候,


不过,使用这种方法,我需要用使用ajc的任务替换compileJava任务。构建最终将使用ajc,即使它没有编译方面。我最终创建了一个aspectJ源集,将所有java srcdir添加到该源集中,重新定义了compileAspectJJava任务以使用ajc,并创建了一个使用compileAspectJJava输出的jar任务。