在过去,我一直使用-Wall和其他gcc开关来消除我参与的项目的每个编译器警告.同样,在Perl中,我总是使用严格编程并使用警告(并且经常使用-T) )试图达到我能做到的最佳代码质量.据我所知,几年前,Perl搬运工小组努力使perl本身(Perl解释器)在gcc下干净利落地编译并启用了所有警告.显然他们觉得这对代码质量来说是一个好主意.我也明白,现在Perl程序员已经在他们的代码中添加了更多的警告Perl :: Critic,当他们违反Damian Conway的Perl最佳实践书(以及其他来源,我相信)中发现的最佳实践时会发出警告.
我一直对代码有一种很好的感觉,我用这种方式清理过,但有时我无法避免一些工作有点浪费的感觉.例如,在十多年前的我的介绍C类中,我被教导要启动我的main()函数,如下所示:
void main(void) {
Run Code Online (Sandbox Code Playgroud)
这是最小的,只能在您没有返回值并且没有访问您的参数时使用.它在这种情况下工作正常,但gcc警告会让你知道这个函数应该是这样的:
int main(int args, char* argv) {
Run Code Online (Sandbox Code Playgroud)
我必须在当天输入几百个未使用的int args,char*argv行.我真的让我的代码变得更好,或者只是把手指缩短了吗?
现在我在Eclipse中用Java编程,我们的项目有成千上万的警告.我想清理它们.其中一些特别难以理解和消除,但我正在慢慢学习.其中一些我必须处理编译器指令以抑制警告(通常用微小的方法来分解忽略警告的不良做法),但我也在寻找方法来处理这些警告.
这值得程序员的时间吗?如果您追踪每个编译器警告,项目真的会好得多吗?
如果没有别的,似乎将警告的数量减少到零是好的,这样严重的警告就不会在混乱中丢失.
注意:这个问题重复一遍
在Perl中,如何创建子目录,同时创建父目录(如果它们不存在)?像UNIX的mkdir -p命令一样?
我们刚刚发现每次重新启动JBoss时,我们所有的Java Web Start客户端都会重新下载所有的jar,而不是重用缓存的jar,即使我们的应用程序没有更改.
从我在网上看到的,Java Web Start做一个HTTP HEAD决定是否下载jar.所以我在我们的应用程序中的所有jar上运行了HTTP HEAD,发现在重启JBoss之后,所有jar的修改时间都发生了变化!
为什么会这样,我该如何解决?我的应用程序存档中的jar文件根本没有变化.据我所知,JBoss使用启动时间或部署时间作为修改时间.如果我理解正确的话,这将完全缩短Java Web Start使用先前运行的缓存jar的能力.
我们使用JBoss 6,如果这是一个问题.以前我们使用过JBoss 4.我想检查一下我们是否在JBoss 4下遇到了问题,但是我们现在对新JBoss有很多依赖关系,它需要做一些工作才能完成测试.
我想把一组看起来像这样的文件放到一个jar中:
yay/my.jar
boo/my.jar
foo/my.jar
bar/my.jar
Run Code Online (Sandbox Code Playgroud)
在这个过程中,我希望所有这些都重命名如下:
yay_my.jar
boo_my.jar
foo_my.jar
bar_my.jar
Run Code Online (Sandbox Code Playgroud)
我希望使用映射器来实现这一点,但我使用的文件集元素和jar任务似乎并不支持它.
如何在构建jar时应用映射器,或者如何执行这样的转换?我想避免将所有文件复制到我想要的目录结构中并在整个地方制作副本,这就是我们的构建系统现在的工作方式.
我有一个应用程序,在log4j.properties文件中配置log4j日志记录.目前,此应用程序在UNIX上运行并在/ tmp中创建日志文件.这个应用程序需要在Windows上运行,在那个平台上我想让它选择正确的临时目录,我相信它是C:\ temp.
如何更改我的log4j.properties文件以实现此目的?我是否需要切换到使用XML配置文件?
我有一个Strawberry Perl程序,它接受单个文件作为命令行参数.我如何设置,以便我可以将所需的文件拖放到Strawberry Perl程序(或它周围的包装器)上,程序以该文件的名称作为参数运行?
我正在尝试为访问WSDL描述的Web服务的Java应用程序编写一个模块.源WSDL直接从我认为是ASP.NET Web服务下载; 服务URL以.asmx扩展名结尾,在浏览器中查看服务URL显示可用于下载WSDL的链接.
对我而言,一个关键要求是能够在不重新编译的情况下切换服务URL.给我的URL显然是一个测试服务器,我知道在生产中我将获得一个生产URL使用.我还希望能够自己创建一个模拟服务器进行测试,并保留将来指定新URL的功能,而无需在移动服务时重新编译.实际上,我希望我们的应用程序的安装能够在不同的URL 实例化web服务的多个实例.
但我的概念似乎与wsimport工具为我做的事情不相符.继f1sh的答案在这里,我生成的Java代码从我用这个命令下载WSDL:
wsimport -Xnocompile -keep -b binding.xml wsdlFile.wsdl
Run Code Online (Sandbox Code Playgroud)
我发现生成的代码对我下载的wsdlFile.wsdl有一个硬编码的引用,其中包含服务URL.我们的应用程序不会以通过在运行时编辑WSDL文件来配置它的方式运行.我需要在构建时将代码编译到我的应用程序中,并且可以在实例化时设置服务URL.
我不完全确定为什么WSDL甚至需要在运行时解析; 我的理解是WSDL提供了足够的信息来生成可以访问web服务的代码,所以我不确定它为服务URL以外的生成代码提供了什么,我不知道为什么服务URL没有提供构造函数或可通过生成的Web服务类上的方法进行配置.我肯定错过了什么.
这种情况的一般做法是什么?大多数人会为他们将要使用的每个URL重新生成代码吗?代码是在运行时生成的吗?是否有另一个我可以使用的WSDL工具,它将使用可配置的URL构建客户端代码?
我们正在将我们的应用程序从JBoss 4升级到JBoss 6.
我们的应用程序的几个部分以一种不寻常的方式传递给客户端:在我们的应用程序内部查找jar并从servlet发送到客户端,客户端在其中提取它们以运行某些支持功能.
在JBoss 4中,我们将使用类加载器查看这些jar,并找到一个jar:// URL,用于读取jar并将其内容发送到客户端.
在JBoss 6中,当我们执行查找时,我们得到一个vfs:/ URL.我知道这是来自org.jboss.vfs包.不幸的是,当我在这个URL上调用openStream()并从流中读取时,我立即得到一个EOF(read()返回-1).
是什么赋予了?为什么我不能读取此URL引用的资源?
我试过通过JBoss VFS API尝试访问底层VFS包来打开文件,但是大多数API似乎是私有的,我找不到从vfs:/ URL转换为VFS的例程VirtualFile对象,所以我无法到达任何地方.
我可以尝试在JBoss中找到磁盘上的文件,但这种方法在升级时听起来非常容易出错.
我们的旧方法是使用Java Web Start将jar分发到客户端,然后在Java Web Start的缓存中查找它们以提取它们.但是,由于缓存的布局发生了变化,因此Java的每次小升级都会破坏.
我喜欢几年前编程语言概念课程中的Scheme.自从阅读了Paul Graham关于Lisp的内容之后,我一直打算再次选择Scheme并查看它是否会改善我的编程.
有没有用Scheme编写的着名软件作品?开源软件包?网站?
我正在插入带有自动增量键字段的SQLServer表.(我相信这在SQLServer中称为IDENTITY列.)
在Oracle中,我可以使用RETURNING关键字为我的INSERT语句提供一个结果集,就像SELECT查询一样,它将返回生成的值:
INSERT INTO table
(foreign_key1, value)
VALUES
(9, 'text')
RETURNING key_field INTO :var;
Run Code Online (Sandbox Code Playgroud)
如何在SQLServer中完成此操作?
额外奖励:好的,到目前为止答案很好,但如果可能的话,如何将其写入单一陈述?:)