我一直在尝试在Subversion中将目录结构从一个位置移动到另一个位置,但是我收到了一个Item '*' is out of date提交错误.
我已经检查了最新版本(据我所知).svn st -u除了mv命令之外,没有任何差异.
我刚才考虑过这个问题,最近我的商店正在制作它的第一个真正的Java网络应用程序.
作为介绍,我看到两个主要的包命名策略.(要清楚,我不是指整个'domain.company.project'的一部分,我在谈论它下面的包约定.)无论如何,我看到的包命名约定如下:
功能:根据业务领域,根据其功能在架构上命名您的包,而不是其身份. 另一个术语可能是根据'layer'命名.所以,你有一个*.ui包和一个*.domain包和一个*.orm包.您的包是水平切片而不是垂直切片.
这是多比逻辑命名更常见.事实上,我不相信我曾经见过或听说过这样做的项目.这当然让我很害羞(有点像认为你已经提出解决NP问题的方法),因为我不是非常聪明,我认为每个人都必须有充分的理由按照他们的方式去做.在另一方面,我不反对人们只是缺少在房间里的大象和我从来没有听说过的实际参数为做包命名这种方式.它似乎是事实上的标准.
逻辑:根据业务域标识命名您的包,并将与该垂直功能片有关的每个类放入该包中.
正如我之前提到的,我从未见过或听说过这一点,但这对我来说很有意义.
我倾向于垂直而不是水平地接近系统.我想进入并开发订单处理系统,而不是数据访问层.显然,我很有可能在该系统的开发中触及数据访问层,但重点是我不这么认为.当然,这意味着当我收到变更单或想要实现一些新功能时,不必为了找到所有相关的类而不必去一堆包中钓鱼.相反,我只是查看X包,因为我正在做的与X有关.
从开发的角度来看,我认为让您的软件包记录您的业务领域而不是您的架构是一项重大胜利.我觉得这个领域几乎总是系统的一部分,因为系统的体系结构,特别是在这一点上,它的实现几乎变得平凡,因此很难理解.事实上,我可以通过这种类型的命名约定进入系统,并立即从包的命名知道它处理订单,客户,企业,产品等,这似乎非常方便.
看起来这样可以让你更好地利用Java的访问修饰符.这使您可以更清晰地将接口定义到子系统中,而不是定义到系统的各个层中.因此,如果你有一个你想要透明持久的订单子系统,理论上你永远不会让任何其他东西知道它是持久的,因为不必在dao层中为其持久性类创建公共接口,而是将dao类包装在只有它处理的类.显然,如果您想公开此功能,可以为其提供界面或将其公开.通过将系统功能的垂直切片分成多个包,您似乎失去了很多.
我认为我可以看到的一个缺点是,它确实使得剥离层更加困难.您必须进入并更改所有软件包中的所有类,而不是仅删除或重命名软件包,然后使用备用技术删除新软件包.但是,我不认为这是一个大问题.这可能源于缺乏经验,但我必须想象,与您进入和编辑系统中的垂直特征切片的次数相比,您更换技术的次数相形见绌.
所以我想那个问题会告诉你,你如何命名你的包裹以及为什么?请理解我并不一定认为我偶然发现了金鹅或其他东西.我对这一切都很陌生,主要是学术经验.但是,我无法发现我的推理中的漏洞,所以我希望你们都能这样,以便继续前进.
我正在寻找让REPL打印出函数当前定义的能力.有没有办法做到这一点?
例如,给定:
(defn foo [] (if true "true"))
Run Code Online (Sandbox Code Playgroud)
我想说点什么
(print-definition foo)
Run Code Online (Sandbox Code Playgroud)
并得到一些东西
(foo [] (if true "true"))
Run Code Online (Sandbox Code Playgroud)
打印.
我有以下的(篡改)类我正在和系统FindBugs的是产生SE_BAD_FIELD警告,我试图了解为什么它会说,之前,我解决它在我以为我会的方式.我感到困惑的原因是因为描述似乎表明我在类中没有使用其他非可序列化的实例字段,但bar.model.Foo也不是可序列化的并且以完全相同的方式使用(就我而言)可以告诉)但Findbugs没有发出任何警告.
import bar.model.Foo;
import java.io.File;
import java.io.Serializable;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Demo implements Serializable {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final File file;
private final List<Foo> originalFoos;
private Integer count;
private int primitive = 0;
public Demo() {
for (Foo foo : originalFoos) {
this.logger.debug(...);
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
我最初对解决方案的羞耻是在我使用时从工厂获得记录器参考:
public DispositionFile() {
Logger logger = LoggerFactory.getLogger(this.getClass());
for (Foo foo : originalFoos) {
this.logger.debug(...);
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎并不特别有效.
思考?
我有以下数据结构:
{:file #<File /foo.bar>, :resolution {:width 1280, :height 1024}}
Run Code Online (Sandbox Code Playgroud)
我想编写destructures的功能:resolution键进入width和height符号.就像是
(defn to-directory-name [{{:keys [width height]}} wallpaper]
(str width "x" height))
Run Code Online (Sandbox Code Playgroud)
这种可能与解构有关吗?
谢谢.
我在数据库中有一个可选字段,我使用DAO记录集提取.在将其与其他字段连接之前,我需要检查字段是否已设置.到目前为止,我有下面的代码片段,我已经与两个尝试Is和=(这是显然错误的语法[[Is | =]])无济于事.看来,如果我使用=它将无法正确比较,Null如果我使用Is它然后抱怨它不是与对象比较.
While Not rs.EOF
If rs.Fields("MiddleInitial") [[Is | =]] Null Then thisMiddleInitial = "" Else thisMiddleInitial = rs.Fields("MiddleInitial")
If prettyName(myLastName, myFirstName, myMiddleInitial) = prettyName(rs.Fields("LastName"), rs.Fields("FirstName"), thisMiddleInitial) Then
MsgBox "Yay!"
End If
rs.MoveNext
Wend
Run Code Online (Sandbox Code Playgroud)
如果有一个更简单的方法,我完全愿意接受它.prettyName需要3个字符串作为参数,最初我只是尝试直接传递rs.Fields("MiddleName"),但它以Null值抛出.我更愿意做更直接的事情,但这是我能想到的最好的事情.
我正在尝试将Hudson设置为CI服务器,但我无法让一切工作正常.我正在尝试使用'官方'git插件.我没有使用stephenh开发的备用插件进行任何测试.
我想知道是否有其他人让Hudson与Git或任何CI服务器一起工作与Git合作.如果是这样,如何以及使用什么配置.
相关信息是我在Hudson 1.277,我使用的是Git 1.6.1.1.230.gdfb04和Git Plugin 0.5,都在Windows平台上.
提前致谢!
我的构建脚本中有以下清理函数,我想知道如何改进它.
<target name="clean" description="Clean output directories.">
<!-- Must not fail on error because it fails if directories don't exist.
Is there really no better way to do this? -->
<delete includeEmptyDirs="true" failonerror="false">
<fileset dir="${main.build.directory}" />
<fileset dir="dist" />
<fileset dir="${documentation.build.directory}" />
<fileset dir="/build-testing" />
</delete>
</target>
Run Code Online (Sandbox Code Playgroud)
特别是关于我的评论,我不满意我无法在一个新盒子上运行它,因为目录结构还没有被其他目标设置.我们以这样的方式运行构建,即它每次都完全重新创建测试和部署所需的结构,以避免过时的类文件等.使用当前设置删除的方式,删除文件失败不会使构建失败,我希望它能够.如果文件不存在,我不希望它失败.如果它不存在那么我要求它做的事情已经发生了.
思考?
我们有一个奇怪的问题,即随机且不经常的,删除META-INF文件夹的compileJava任务和要启动的编译类,运行但processResources任务报告是最新的,即使META-INF目录显然不存在.
这给我们留下了很大的时间,因为没有applicationContext.xml,工件可能会让它一直生产!
对于我们来说,执行该任务的成本非常低,是否有可能强制它运行,无论如何?
我和我的团队正在开发一个Java Web应用程序,使用Tomcat作为我们的开发测试服务器,Ant作为我们的构建工具.我们的平台是Windows,但我们正在运行Cygwin中的Tomcat,因为我们首选的shell是bash.由于频繁重启应用程序以使新实现的功能可用于测试,我们遇到了内存耗尽的一致问题.
我们最初尝试重新加载应用程序,而无需使用提供的Catalina ant任务重新启动服务器.这适用于几次迭代但是我们总是耗尽Permgen空间.需要说明的是,这是指与Tomcat捆绑在一起的Ant任务,它启动,停止,部署,取消部署和列出应用程序.再次,这样做超过3次会导致Permgen内存错误,我们不得不手动杀死java进程.这就是为什么我们试图杀死服务器本身而不是应用程序.
我们的下一个想法是每次都重启服务器.我们一直存在的问题是服务器的关闭似乎并没有破坏java进程.最终,除非您手动监视并终止它们,否则内存只会耗尽所有这些僵尸进程.我尝试过的实现如下:
<target name="tomcat.server.start" depends="tomcat.server.online" unless="tomcat.server.online">
<java jar="${tomcat.home}/bin/bootstrap.jar" fork="true">
<jvmarg value="-Dcatalina.home=${tomcat.home}" />
</java>
<waitfor maxwait="30" maxwaitunit="second" timeerty="tomcat.offline">
<socket port="8081" server="127.0.0.1" />
</waitfor>
<fail if="tomcat.offline">Tomcat failed to come up.</fail>
</target>
Run Code Online (Sandbox Code Playgroud)<target name="tomcat.server.start" depends="tomcat.server.online" unless="tomcat.server.online">
<exec executable="bash" os="Windows" failonerror="true" >
<arg line="-i ../tools/tomcat/bin/startup.bat />
</exec>
<waitfor maxwait="30" maxwaitunit="second" timeerty="tomcat.offline">
<socket port="8081" server="127.0.0.1" />
</waitfor>
<fail if="tomcat.offline">Tomcat failed to come up.</fail>
</target>
Run Code Online (Sandbox Code Playgroud)执行shutdown | startup.sh文件.
<target name="tomcat.server.start" depends="tomcat.server.online" unless="tomcat.server.online">
<exec executable="bash" failonerror="true" …Run Code Online (Sandbox Code Playgroud)