我们有一个使用新Gradle构建系统的Android项目,我们使用Android Studio作为开发工具.如果指定了多种产品风格build.gradle,我们会注意到Android Studio按字母顺序构建了第一个.有没有办法告诉Android Studio在开发过程中只构建和测试特定的产品风格?
为了好玩,我决定从源代码编译vim.简而言之,构建似乎很顺利,但是当我进入插入模式时,我无法使用<BACKSPACE>键删除在插入模式下使用<ENTER>键创建的现有字符或换行符.这个发行版的预制包就可以了.我也知道退格键本身没有问题,因为我可以对我刚输入的字符进行退格,而不是现有的字符.
这几乎是有道理的,因为vim大部分时间都是按行进行的.我需要设置一个标志来支持这种行为吗?或者设计进入正常模式以删除现有字符/换行符更快?
我最近使用了一个允许以下类型语法的库:
MyClass myObject;
myObject
.setMember1("string value")
.setMember2(4.0f)
.setMember3(-1);
Run Code Online (Sandbox Code Playgroud)
显然,这是通过让setter返回MyClass&type来实现的; 类似return*this.我喜欢这段代码的样子,但我看不太多.当发生这种情况时,我通常会怀疑为什么.
那么,这是一种不好的做法吗?像这样做的一些含义是什么?
这个问题是非常相似,在提出的一个这样的问题,但我有解决方法如下一些问题.
问题:
基本上我有一个subversion服务器和一个mercurial本地客户端.扩展hg-subversion允许mercurial充当subversion客户端.这对我来说是理想的,因为我可以在我的subversion开发分支中创建无限的功能分支,并在我选择合适时合并它们.
由于subversion的限制,我无法将分支合并提交到subversion存储库.实际上,我不需要提交每个分支合并,我只想将"默认"分支头提交给SVN.
拟议的解决方案:
Harvey建议的解决方法用户是修改我的工作流程,以包含用于开发的hgsubversion克隆的仅hg克隆.
引用哈维的话:
诀窍是学习修改后的hg < - > hgsubversion < - > svn工作流程.一旦你"了解"它的工作方式,你就不会有任何麻烦.你只需输入几个命令.我实际上已经开始编写脚本来使这个过程(重复性)更容易.典型流程:[in"hg"repo]提交一系列更改; 把他们推向"hgsubversion"; [切换到"hgsubversion"] hg update(hgsubversion需要这个); hg推送到"svn"(在你推送并在本地删除你的变更集后自动重新拉出); [切换回"hg"] hg从"hgsubversion"拉出; hg剥离较旧的重复项b/c"hg"不是hgsubversion克隆,并且不知道自动剥离旧的变更集.
我遇到的问题:
我遇到了从hgsubversion运行hg push到svn存储库的问题.我仍然收到错误消息,"abort:抱歉,找不到合并修订版的svn父版."
不可否认,我不是100%关于hgsubversion如何推动对svn的修改.老实说,我希望看到我的本地副本被推送到svn服务器的状态.
HALP?
我们正在使用看起来像这样的JPA注释类型(groovy代码):
@Entity
@EqualsAndHashCode
class TextNote extends Serializable {
@Id Long id
String text
}
Run Code Online (Sandbox Code Playgroud)
在第一次编写时,我是JPA的新手并首先编写SQL,然后使注释的类与SQL匹配.阅读PostgreSQL似乎以下是我想要的表:
CREATE TABLE textnote (
id bigint NOT NULL,
text text
);
Run Code Online (Sandbox Code Playgroud)
这很有效,我们的表格看起来像这样:
id | text
-----+------------------------
837 | really long text here
Run Code Online (Sandbox Code Playgroud)
我现在要做的是纠正JPA实体看起来像这样:
@Entity
@EqualsAndHashCode
class TextNote extends Serializable {
@Id Long id
@Lob String text
}
Run Code Online (Sandbox Code Playgroud)
通过添加@Lob注释,JPA提供程序(在我的情况下,hibernate)可以为我正确生成DDL,以防我们想要交换数据库.它还准确记录了我想要的文本字段.现在,当一个笔记被创建时,我看到这样的东西:
id | text
-----+------------------------
837 | 33427
Run Code Online (Sandbox Code Playgroud)
这对于新笔记来说很好,因为当我使用String getText()在代码中读取它时,它会返回非常长的文本.老实说我不知道PostgreSQL如何实现这种text类型,理论上我也不需要.但是,我们的生产数据库已经使用没有@Lob注释的旧代码存储了许多注释.在现有数据库上运行新代码会产生如下问题:
org.springframework.dao.DataIntegrityViolationException: Bad value for type long : not a number this time; …Run Code Online (Sandbox Code Playgroud) 使用spring-security-oauth2保护我的资源免受可充当授权服务器的SSO端点的影响.当文档说明时我有点困惑:
OAuth 2.0中的提供者角色实际上是在授权服务和资源服务之间分配的,虽然这些角色有时位于同一个应用程序中,但是使用Spring Security OAuth,您可以选择将它们分成两个应用程序,还可以拥有多个共享的资源服务授权服务.
但我认为我没有找到这种情况的例子.在sparklr/tonr中,授权服务器和资源服务器位于同一个应用程序中.我从搜索中看到的唯一例子是spring-servlet.xml,它需要这个自定义实现ResourceServerTokenServices才能工作.
ResourceServerTokenServices如果可能的话,我想避免编写自定义实现.是否有另一种方法来支持资源服务器中的外部授权服务器?有点像:
<bean class="com.example.ExternalAuthorizationServerTokenServices"
p:remote-url="https://my-oauth-compatible-sso.com"
p:token-endpoint="/oauth/access_token"
p:authorize-endpoint="/oauth/authorize" />
Run Code Online (Sandbox Code Playgroud)
这可能吗?
*编辑:我将添加它作为一种解决方法(或者这可能是预期的解决方案)我正在使用jdbc令牌存储并依赖于这两个服务器碰巧有权访问该数据库的事实.
我正在尝试命名由gradle构建的工件.看看这个build.gradle:
archivesBaseName='this_is_ignored'
apply plugin: 'groovy'
archivesBaseName='this_is_also_ignored'
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.+'
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过gradle.properties:
archivesBaseName=`this_is_ignored_too`
Run Code Online (Sandbox Code Playgroud)
在每种情况下都会./gradlew build根据项目所在的文件夹生成一个.jar文件(根据我的理解project.name,我只是希望用它来覆盖它archivesBaseName).
换句话说,我想:
~/gradle-helloworld > ./gradlew build
Run Code Online (Sandbox Code Playgroud)
生成this_is_ignored.jar,但它正在生成gradle-helloworld.jar.
有任何想法吗?
我有一个GORM对象,我正在进行集成测试.它有一个beforeUpdate钩子,可以保存以前密码哈希的历史记录.代码看起来像这样:
class Credentials {
List passwordHistory = []
String username
String password
static hasMany = [passwordHistory : String]
def beforeUpdate() {
// of course I'm not really storing plain-text passwords, but
// this is just for illustration.
if (isDirty('password')) { passwordHistory << password }
}
}
Run Code Online (Sandbox Code Playgroud)
在集成测试中,我想知道为什么:
appUser.credentials.password = newPassword
appUser.save(flush: true)
sessionFactory.currentSession.flush()
AppUser.withNewSession {
appUser = AppUser.get(appUser.id)
appUser.credentials.empty // eagerly fetch the list while session is open
}
assert !appUser.credentials.passwordHistory.empty() // contains the previous password
Run Code Online (Sandbox Code Playgroud)
有效,但是
appUser.credentials.password …Run Code Online (Sandbox Code Playgroud) 我们在生产中有一个数据库,它在"user"表中已有很多行.请考虑以下来自flyway网站的声明:
如果您有一个尚未由Flyway填充的现有数据库,那么这是要走的路:
- 创建一个初始迁移脚本,该脚本将重新创建当前状态并为其提供较低的版本号.
- 使用flyway:init创建元数据表并将此脚本设置为当前版本.
我想使用flyway管理我的模式和数据库中的各种常量,但我不希望V1__Base_version.sql包含我们当前生产用户的帐户信息,特别是考虑到它存储在SCM中.如果我正确地理解了这些指令,我需要能够用V1__Base_version.sql"重新创建[my]当前状态".
那么只使用模式创建初始迁移并且常量可以正常工作吗?或者我们工作站上的数据库是否需要与生产中的数据库100%匹配?
我们有一个生成可执行工件的计划.有没有办法告诉Bamboo在构建通知中将这些工件作为附件发送电子邮件?为了记录,我们按需使用atlassian.