如何从ant构建脚本中查找最新的git commit hash?
我目前正在开发一个新的开源项目,我存储在github上.我想扩展我现有的ANT构建文件,以允许我创建编号的构建.我想我会用"ant buildnum -Dnum = 12"之类的东西启动构建.
我希望生成的jar在它的清单文件中有两个关键信息:
我知道如何创建build.number行.但是,我不确定最好的ant管道来查找最新的git commit hash,这是我想填写的值.
我用SWT编写了一个Java GUI.我使用ANT脚本打包应用程序(下面的片段).
<jar destfile="./build/jars/swtgui.jar" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Main-Class" value="org.swtgui.MainGui" />
<attribute name="Class-Path" value="." />
</manifest>
<fileset dir="./build/classes" includes="**/*.class" />
<zipfileset excludes="META-INF/*.SF" src="lib/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f.jar" />
</jar>
Run Code Online (Sandbox Code Playgroud)
这会生成一个jar,在Windows上我只需双击即可运行我的GUI.缺点是我必须将Windows SWT包显式打包到我的jar中.
我希望能够在其他平台(主要是Linux和OS X)上运行我的应用程序.最简单的方法是创建特定于平台的jar,将适当的SWT文件打包到单独的JAR中.
有一个更好的方法吗?是否可以创建一个可在多个平台上运行的JAR?
我正在使用GitHub开发Eclipse插件.我想为我的插件创建一个公共Eclipse更新站点.我可以使用GitHub吗?
我知道GitHub可以通过使用文件信息页面上提供的"原始"链接来托管单个文件.
我有一个svn工作副本,我试图反向合并几个最近的修订版.在我改变主意之前,我在合并之前取消了合并.现在,我的工作副本对大多数文件的祖先相关属性的更新有几千个"更改".我有大约10个混合实际代码更改的文件,我不想手动分开.
我是否有办法在不影响内容更改的情况下还原所有属性更改?
我有几个Github项目,我希望能够跟踪流量.我之前通过向每个维基页面添加Google Analytics跟踪代码来完成此操作.然而,九月份的Github wiki升级打破了这一点,我似乎无法再将Javascript代码添加到我的wiki页面.
几个随机的其他要点:1)我知道Github可能出于安全原因阻止了wiki上的JS.2)我知道Github提供了自己非常基本的流量图,但我想要GA的所有功能.
我有什么方法可以将Google Analytics跟踪恢复到我的Github wiki吗?如果没有,有替代方案吗?
我目前正在尝试诊断应用程序中的缓慢内存泄漏.我到目前为止的事实如下.
尽管只是被WeakReferences引用(根据Eclipse Memory Analyzer Tool),但是可能导致这些Foo类无法收集的原因是什么?
EDIT1:
@mindas我使用的WeakReference等同于以下示例代码.
public class FooWeakRef extends WeakReference<Foo>
{
public long longA;
public long longB;
public String stringA;
public FooWeakRef(Foo xiObject, ReferenceQueue<Foo> xiQueue)
{
super(xiObject, xiQueue);
}
}
Run Code Online (Sandbox Code Playgroud)
Foo没有终结器,只要没有清除WeakRefs,任何终结器都不会被考虑.当一个对象弱可达时,它不能最终确定.有关详情,请参阅此页面.
@kasten在对象可最终化之前清除弱引用.我的堆转储显示这没有发生.
@jarnbjo我引用WeakReference Javadoc:
"假设垃圾收集器在某个时间点确定一个对象是弱可达的.那时它将原子地清除对该对象的所有弱引用以及对该对象可从其访问的任何其他弱可达对象的所有弱引用通过一系列强大而柔软的参考资料."
这告诉我,GC应该检测到我的Foo对象是"弱可达"和"当时"清除弱引用这一事实.
编辑2
@j flemm - 我知道40mb听起来并不多,但我担心4天内40mb意味着100天内4000mb.我读过的所有文档都表明,弱可达的对象不应该闲置几天.因此,我对如何在没有引用显示在堆转储中时强烈引用对象的任何其他解释感兴趣.
当一些悬空Foo对象存在时,我将尝试分配一些大对象,并查看JVM是否收集它们.但是,此测试需要几天时间才能完成设置.
编辑3
@jarnbjo - 我知道我不能保证JDK何时会注意到一个对象是弱可达的.但是,我认为重载4天的应用程序会为GC提供足够的机会来注意我的对象是弱可达的.4天后,我强烈怀疑其余的弱引用对象已经以某种方式泄露.
编辑4
@j flemm - 多数民众赞成真有意思!只是为了澄清,你是说GC正在你的应用程序上发生并且没有清除Soft/Weak refs?您能否告诉我有关您正在使用的JVM + GC配置的更多详细信息?我的应用程序使用80%堆的内存条来触发GC.我假设任何旧的GC的GC都会清除Weak refs.一旦内存使用率高于更高的阈值,您是否建议GC仅收集弱引用?这个更高的限制是否可配置?
编辑5
@j flemm - 关于在SoftRefs之前清除WeakRefs的评论与Javadoc一致,其中声明:SoftRef:"假设垃圾收集器在某个时间点确定一个对象可以轻柔地到达.那时它可以选择清除原子地对该对象的所有软引用以及对任何其他可通过一系列强引用访问该对象的软可引用对象的所有软引用.同时或稍后它会将那些新清除的软引用排入队列在参考队列中注册."
WeakRef:"假设垃圾收集器在某个时间点确定一个对象是弱可达的.那时它将原子地清除对该对象的所有弱引用以及对该对象的任何其他弱可达对象的所有弱引用可以通过一系列强引用和软引用来访问.同时它将声明所有以前弱可达的对象都可以最终确定.同时或稍后它会将那些新清除的弱引用排入队列.在参考队列中注册."
为清楚起见,您是说当您的应用程序具有超过50%的可用内存时垃圾收集器运行,并且在这种情况下它不会清除WeakRefs?当你的应用程序有超过50%的可用内存时,为什么GC会运行?我认为你的应用程序可能只是产生非常少量的垃圾,当收集器运行时它正在清除WeakRefs而不是SoftRef.
编辑6 …
在Java中,String toLowerCase方法使用默认系统Locale来确定如何处理小写.如果我小写一些ASCII文本,并希望确保按预期处理这个,我应该使用哪个Locale?
编辑:我主要关心的是在模式中编写表名和列名等标识符.因此我想要英文下套管适用.
Locale.ROOT声明它是区域设置敏感操作的语言/国家/地区中性区域设置
Locale.ENGLISH可能也是一个安全的选择.
我一直在使用Eclipse内存分析工具来检查堆转储.我还没有看到任何一个对象通过线程堆栈中的局部变量保持活动的情况.
堆转储中是否保留了java线程堆栈?如果没有,这些对象是否被计为转储中无法访问的对象?如果是这样,有没有办法保留线程堆栈,以便可以将未收集的垃圾与局部变量值区分开来?
我有一个C#应用程序,它使用消息命中ObjectDisposedException
安全手柄已关闭
一旦我启动应用程序,就会发生这种情况.
可悲的是,堆栈跟踪真的没有用(见下文).有什么方法可以让我确定在这里异步尝试的呼叫是什么?
DoAsyncCall()是否真的意味着异步方法调用?
mscorlib.dll中!System.Threading.EventWaitHandle.Set()+ 0xe字节
mscorlib.dll中!System.Runtime.Remoting.Messaging.AsyncResult.SyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage MSG)+ 0x12f字节
mscorlib.dll中! System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage味精,System.Runtime.Remoting.Messaging.IMessageSink replySink = {System.Runtime.Remoting.Messaging.AsyncResult})+ 0x279个字节
的mscorlib .DLL!System.Runtime.Remoting.Proxies.AgileAsyncWorkerItem.DoAsyncCall()+ 0x32字节mscorlib.dll中!System.Runtime.Remoting.Proxies.AgileAsyncWorkerItem.ThreadPoolCallBack(对象o)+ 0×28字节
的mscorlib.dll!System.Threading._ThreadPoolWaitCallback .WaitCallback_Context(对象状态)+值为0x2F字节
mscorlib.dll中!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext的ExecutionContext,System.Threading.ContextCallback回调,对象状态)+ 0x6f字节
mscorlib.dll中!System.Threading._ThreadPoolWaitCallback .PerformWaitC allbackInternal(System.Threading._ThreadPoolWaitCallback tpWaitCallBack)+ 0x53字节
mscorlib.dll中!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(对象状态)+ 0×59字节
我目前使用Clover来测量我的Java代码的代码覆盖率.我依赖的一个功能是能够从覆盖率报告中排除任意代码段:
///CLOVER:OFF because this case is simpler to verify by code read
if (lFile.isFile() &&
lFile.getName().endsWith(FILE_EXTN) &&
!lFile.delete())
{
throw new IOException("delete() failed for: " + lFile);
}
///CLOVER:ON
Run Code Online (Sandbox Code Playgroud)
我发现这种排除使得更容易专注于测试有趣的逻辑,同时仍然实现100%的代码覆盖率.
是否有其他Java代码覆盖工具(免费或付费)支持这种细粒度排除?全班或整个方法排除不够好.
注意:我目前正在调查添加适合JaCoCo的东西(问题#14).
java ×5
ant ×2
github ×2
c# ×1
debugging ×1
eclipse ×1
git ×1
jar ×1
javascript ×1
localization ×1
memory-leaks ×1
package ×1
plugins ×1
svn ×1
swt ×1