复制一个文件并用 gradle 重命名它的最简洁、最优雅和最短的方法是什么?
到目前为止我只能想到这个:
copy {
from projectDir
into projectDir
include '.env.template'
rename '.env.template', '.env'
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试了解 gradle 构建的工作原理。当我进行构建时,我看到执行了一堆任务,例如:
app:assembleDebug
app:preBuild
app:packageDebug
Run Code Online (Sandbox Code Playgroud)
我想看看这些任务到底在做什么。我假设这些是 Gradle / Groovy 脚本。我尝试解压缩 Android Studio 下的所有 jars。那里有很多东西,但我没有看到任何相关的东西(我可能在大量列表中遗漏了一些东西)。这些任务是否隐藏在类文件中?我找错地方了吗?
我正在尝试使用System.IO.Abstraction项目和 System.IO.Abstraction.TestingHelpers 来模拟FileStream.
这是使用我要测试的文件流的代码:
private readonly IFileSystem _fileSystem;
public void ExtractImageAndSaveToDisk(IXLPicture xlPicture, string filePath)
{
using (MemoryStream ms = new MemoryStream())
{
xlPicture.ImageStream.CopyTo(ms);
using (FileStream fs = (FileStream)_fileSystem.FileStream.Create(filePath, FileMode.Create))
{
ms.CopyTo(fs);
fs.Flush();
fs.Close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我设置测试的方式:
[TestMethod]
public void CheckFileIsSavedToDisk()
{
// Arrange
var mockFileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ @"c:\Test\Images\", new MockDirectoryData() },
});
var xlPicture = GetXLPicture();
var filePath = @"c:\Test\Images\myimage.jpeg";
var sut = new CostSheetImageExtractor(mockFileSystem);
// Act
sut.ExtractImagesAndSaveToDisk(xlPicture, filePath);
} …Run Code Online (Sandbox Code Playgroud) 在我的项目中,我需要导入第三方jar文件和Facebook SDK。
compile files('libs/SkinSDK.jar')
compile 'com.facebook.android:facebook-android-sdk:4.14.0'
Run Code Online (Sandbox Code Playgroud)
两者都包含同一BundleJSONConverter类。所以,我无法生成签名的 APK。它总是显示重复的条目 com/facebook/internal/BundleJSONConverter。
所以,我想在 Facebook 或 SkinSDK.jar 中排除。我尝试过像
compile ('com.facebook.android:facebook-android-sdk:4.14.0') {
exclude group: 'com.facebook.internal', module: 'BundleJSONConverter'
}
Run Code Online (Sandbox Code Playgroud)
它不起作用并显示相同的错误。
我们有一个多模块化设置,我们在模块之间共享一些测试类(主要是Fakes实现).我们当前的解决方案(您可以在下面找到)仅适用于用Java编写的类,但我们正在寻找支持共享的kotlin类.
if (isAndroidLibrary()) {
task compileTestCommonJar(type: JavaCompile) {
classpath = compileDebugUnitTestJavaWithJavac.classpath
source sourceSets.testShared.java.srcDirs
destinationDir = file('build/testCommon')
}
taskToDependOn = compileDebugUnitTestSources
} else {
task compileTestCommonJar(type: JavaCompile) {
classpath = compileTestJava.classpath
source sourceSets.testShared.java.srcDirs
destinationDir = file('build/testCommon')
}
taskToDependOn = testClasses
}
task testJar(type: Jar, dependsOn: taskToDependOn) {
classifier = 'tests'
from compileTestCommonJar.outputs
}
Run Code Online (Sandbox Code Playgroud)
我如何修改compileTestCommonJar它支持kotlin?
我正在尝试创建一个任务,该任务看起来在一个文件夹内,并将该文件夹内的所有文件夹压缩到某个输出文件夹。
初始状态:
Folder1
-> project1
->code //some more files within project1
-> project2
->code
Run Code Online (Sandbox Code Playgroud)
目标状态:
Destination
project1.zip
project2.zip
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面的代码,但它压缩了folder1内的所有内容
task myZip(type: Zip) {
from 'Folder1'
archiveName 'Compress.zip'
destinationDir file('build')
}
Run Code Online (Sandbox Code Playgroud)
我可能需要使用一些包含project1和project2信息的集合,并将其迭代地压缩到目标文件夹。这种方法有问题。
当当前目录的名称以'.'(例如/home/you/.gproject)开头时,
gradle build
Run Code Online (Sandbox Code Playgroud)
返回
项目名称
.gproject以'.'. 这已被弃用,并计划在 Gradle 5.0 中删除。设置rootProject.name或调整include语句(参见https://docs.gradle.org/4.3/dsl/org.gradle.api.initialization.Settings.html#org.gradle.api.initialization.Settings:include(java.lang. String[])了解更多详情)。
我该如何解决?我应该避免使用这样的名称(以 a 开头'.')吗?
如果我在 中输入这样的名称settings.gradle,则会出现相同的错误。
我已经将我的 sourceSets 定义为
sourceSets {
// Configuring SourceSets for all connector source files.
main {
java {
srcDirs = ['src']
}
}
test {
// integrationTests
}
unitTests {
//unitTests
}
}
test {
// integrationTests
}
task('unitTest', type: Test) {
//unitTests
}
Run Code Online (Sandbox Code Playgroud)
当我开始时,./gradlew build它的check任务基本上称为test目标。
我可以覆盖默认gradle build任务的“检查”机制来调用unitTest这里而不是调用test吗?
我有一个简单的 Gradle 脚本:
task copyall(){
println 'starting...'
task copyA(type: Copy) {
mkdir 'web'
from 'src'
into 'web'
}
}
Run Code Online (Sandbox Code Playgroud)
它的行为很奇怪:如果我从命令行调用“gradle copyall” - 它会创建目录,但不会将文件从“src”复制到“web”文件夹。如果我从命令行直接调用task.copyA(“gradle copyA”) - 它会创建dir并复制文件(带有子文件夹)。
为什么task.copyA仅作为task.copyall的子任务部分执行?
在我的小型 Django 项目中,用户可以注册并通过填写一些 ModelForms 来使用他们自己的数据填充现有模型。
问题是,登录后,任何用户不仅可以看到自己的数据,还可以看到其他用户创建的数据。我需要避免这种情况。
每个用户都应该能够查看、修改和与他们自己的数据进行交互。
每个模型都有一个ForeignKey链接到User.
我可能在视图中遗漏了什么吗?
它们只是不引用的基于类的视图User,它们只有LoginRequiredMixin装饰器。
对于登录视图,我使用的是 Django 标准,对于注册视图,我创建了一个UserFormView.
# Register page
url(r'^register/$', views.UserFormView.as_view(), name='register'),
# Login page
url(r'^accounts/login/$', auth_views.LoginView.as_view(), name='login'),
Run Code Online (Sandbox Code Playgroud)
以下是我的看法:
class AllProgramsView (LoginRequiredMixin, generic.ListView):
template_name = 'programs/index.html'
context_object_name = 'programs_list'
def get_queryset(self):
return Program.objects.all()
class ProgramDetailView (LoginRequiredMixin, generic.DetailView):
model = Program
template_name = 'programs/program.html'
class ProgramCreate(LoginRequiredMixin, CreateView):
model = Program
form_class = ProgramFormClass
class ProgramUpdate(LoginRequiredMixin, UpdateView):
model = Program
form_class = ProgramFormClass
Run Code Online (Sandbox Code Playgroud)
在models.py …
gradle ×8
java ×3
build.gradle ×2
unit-testing ×2
android ×1
build ×1
c# ×1
copy ×1
django ×1
django-users ×1
kotlin ×1
mkdir ×1
python ×1