我有一个构建文件,作为构建过程的一部分依赖于几个taskdef.这些taskdef项(例如,webdoclet和jasper2)使用log4j作为记录器.理想情况下,我希望能够为每个提供不同的log4j配置文件,但最低限度,我希望能够指定使用哪个log4j配置文件.
我以前做的工作是在类路径的前面放置包含我希望taskdef使用的log4j.xml的目录.例如:
<target name="define.jasper2">
<path id="jspc.classpath">
<!-- Put this FIRST so Jasper will find the log4j.xml in the Build directory -->
<pathelement location="Build"/>
<fileset dir="${tomcat.libs}">
....
</fileset>
<pathelement location="${log4j.jar}"/>
....
</path>
<taskdef name="jasper2" classname="org.apache.jasper.JspC" classpathref="jspc.classpath"/>
</target>
事实上,我已经验证了"Build"目录位于类路径的前面,并且该目录中存在log4j.xml.但是,当我在调试时使用log4j以详细模式运行ant时,我看到log4j正在选择当前工作目录中的log4j.xml ,这不是我想要的.Log4j似乎没有使用类路径来解析默认的log4j.xml.
我正在使用log4j 1.2.8(嵌入在一个更大的框架中,所以我无法升级它),其中一些taskdef似乎依赖于commons-logging 1.0.3.构建过程使用Sun Java 5.
如果我set ANT_OPTS=-Dlog4j.configuration=Build/log4j.xml在运行ant之前,taskdefs正确加载了所需的log4j.xml.
将"Build"目录放在类路径的前面,用于工作的taskdef.我不知道改变了什么.如何恢复我可以控制的行为 - 在build.xml中 - 哪个log4j配置文件用于给定任务?除了设置ANT_OPTS以外,还有其他方法可以将应用程序的log4j.xml移出当前工作目录以使log4j找到正确的log4j.xml文件吗?
我正在compareTo()为一个简单的类实现方法(为了能够使用Collections.sort()和Java平台提供的其他好东西):
public class Metadata implements Comparable<Metadata> {
private String name;
private String value;
// Imagine basic constructor and accessors here
// Irrelevant parts omitted
}
Run Code Online (Sandbox Code Playgroud)
我希望这些对象的自然顺序为:1)按名称排序; 2)如果名称相同则按值排序; 两种比较都应该不区分大小写.对于这两个字段,空值完全可以接受,因此compareTo在这些情况下不得中断.
脑海中出现的解决方案与以下几行相似(我在这里使用"保护条款",而其他人可能更喜欢单个返回点,但这不是重点):
// primarily by name, secondarily by value; null-safe; case-insensitive
public int compareTo(Metadata other) {
if (this.name == null && other.name != null){
return -1;
}
else if (this.name != null && other.name == null){
return 1;
}
else if (this.name != null && …Run Code Online (Sandbox Code Playgroud) 我最近一直在Silverlight工作,我慢慢地发现,尽管开发起来很简单但是有一两个令人烦恼的陷阱隐藏在阴影中.
考虑到其中一些有些难以找到我,我认为将它们列在这里以供其他人受益可能是有用的.我确信我遇到的那些与其他人的经历相比毫无意义,我想尽量避免任何其他令人讨厌或耗时的惊喜.
那么,你有什么?
更新
我已更新此内容以涵盖Silverlight.因此,请提供与响应时相关的版本或列表版本.对于没有版本的所有人,请假设Silverlight 2.0,因为原始问题就是这种情况.
数据库(mySQL,如果一个特定的例子很重要)如何确定存储ENUM所需的列的大小?
对于少于256个枚举选项等,它是否像单个字节一样简单?
在WCF中是否存在某种"内置"身份验证?我需要向我们的客户公开Web服务,以便他们可以检查他们的交易状态.
我最初的想法是他们只使用传入的普通用户名和密码作为方法属性.当然,它会通过SSL,但这种身份验证方法不安全吗?
除了传递方法参数之外,WCF是否有更好的方法允许对请求进行身份验证?
我正在尝试删除隐藏表单元素上的默认装饰器.默认情况下,隐藏元素显示如下:
<dt>Hidden Element Label (if I had set one)</dt>
<dd><input type="hidden" name="foobar" value="1" id="foobar"></dd>
Run Code Online (Sandbox Code Playgroud)
我不希望我的隐藏元素占用我页面上的空间.我想删除所有默认装饰器,所以我剩下的就是输入标签.
<input type="hidden" name="foobar" value="1" id="foobar">
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我不是任何数据库的狂热者,但我希望看到供应商之间的差异.
例如,我主要使用Oracle,我发现其他人(MySQL,SQL Server,PostgreSQL,...)不能这样做:
SQL Server也是如此,其他人无法做到:
我正在考虑建立一个网站,以获得某种面向公众的内容,但与此同时,我希望能够在没有太多麻烦的情况下构建模块和插件.我正在研究像Wordpress,Joomla和Drupal这样的东西,但我想知道是否有人有使用和(更具体地)开发这些应用程序的个人经验.
就个人而言,我正在寻找PHP中的一些东西,但是如果你知道其中一种语言,可以随意发布它以帮助那些正在寻找类似X/Y/Z语言的人.
我可以编写一个单元测试来确保我写的只读类(没有setter的类)将来仍然只读吗?我不希望任何人在我的类中添加setter属性.
基本上,我如何检查一个类是否在C#中没有setter?
尽管这是我见过的最好的错误信息之一(仅次于"此操作可能会破坏时空连续体中的租金"),但它也是最令人沮丧的事情之一.
我开发了一个ASP.NET MVC站点,它可以通过VS2008完美运行.它完美地托管在本地IIS7服务器(Win2008Server和Win7beta)上,以及另一个Win2008Server主机上.几天前,我将网站上传到新主机(Win2008Server),并且只要评估了我的LinqToSQL语句中的一个(并且只有一个),就会遇到"操作可能会破坏运行时"的错误.
有问题的Linq语句已被简化为默默无闻,并且每当我评估结果时,错误都会发生:
var result = from e in db.calendarEvents select e;
foreach (var event in result) // error occurs on this line
{
...
}
Run Code Online (Sandbox Code Playgroud)
有问题的远程主机完全信任,并且看不到切换语句(这两个问题在Google上出现与错误相关).
操作中报告的类似问题可能会破坏运行时的稳定性?,但没有使用接口(我知道).
有任何想法吗?
---只是暂停:有问题的表使用TIME数据类型,并映射到TimeSpan属性.显然,这仅适用于.NET 3.5 SP1.我等着看我的新主机是否安装了SP1 ...
.net ×2
comparison ×2
java ×2
ant ×1
asp.net-mvc ×1
c# ×1
compareto ×1
database ×1
enums ×1
linq ×1
linq-to-sql ×1
log4j ×1
mysql ×1
null ×1
refactoring ×1
security ×1
silverlight ×1
sql ×1
taskdef ×1
unit-testing ×1
wcf ×1
zend-form ×1