在创建 JAR 文件时,我总是将源文件分开并作为可选的附加文件提供。
例如:
这似乎是显而易见的做事方式,并且非常普遍。优点是:
我开始怀疑这些优势是否总是值得的。我正在开发一个开源的小组件。无论如何,我上面列出的优点都不是这个项目中的问题:
然而,保持类的源代码确实带来了新的优势:
这些新优势对我来说真的很有吸引力。是的,我可以将源代码、类甚至 javadoc 压缩到一个 zip 文件中,然后让我的组件的客户决定他们想要使用哪个(就像谷歌对番石榴库所做的那样),但这真的值得吗?
我知道它有点违反传统的软件工程逻辑,但我认为单个 jar 文件的优势超过了替代方案。
我错了吗?有没有更好的办法?
我正在使用cordova cli构建我的应用程序.我想针对android和ios(可能更多).
正如我希望所有平台都适用,我希望我可以简单地在config.xml中将其定义为首选项,如下所示:
<preference name="orientation" value="landscape" />
Run Code Online (Sandbox Code Playgroud)
因为这显然是它在phonegap构建中的工作原理https://build.phonegap.com/docs/config-xml
我假设phonegap build中config.xml支持的功能与cordova-cli不同?
我知道我可以通过插入android:screenOrientation="landscape"我的AndroidManifest.xml 强制它在Android应用程序中,但这并不好,因为它会在下次执行时被覆盖cordova build.
有什么建议?
我正在教自己Ember并且在坚持我的孩子模特时遇到了问题.这是一个演示问题的JSBin:
http://jsbin.com/OnUXEti/2/edit?html,js,output
如果您使用它,您将能够创建帖子和评论,但只有帖子在页面重新加载后仍然可用.(我正在使用ember-data和localStorage适配器)
有两种模型类型,Post和Comment
App.Post = DS.Model.extend({
title: DS.attr('string'),
comments: DS.hasMany('comment')
});
App.Comment = DS.Model.extend({
message: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
每个帖子都有一系列评论.我打算在那里有以下网址:
/posts 将列出所有帖子/posts/1 将显示ID为1的帖子/posts/1/comments 将显示帖子1的评论 路由定义如下:
App.Router.map(function() {
this.resource("posts", { path: "/posts" });
this.resource("post", { path: "/posts/:post_id" }, function() {
this.resource("comments", { path: "/comments" });
});
});
Run Code Online (Sandbox Code Playgroud)
我可以毫无问题地将Post模型写入商店.我不能做的是保存评论模型.如果您使用上面的JSBin示例,您将看到可以创建注释,但在重新加载页面时它们不会保留.
我尝试在CommentsController中保存注释:
App.CommentsController = Ember.ArrayController.extend({
needs: "post",
post: Ember.computed.alias("controllers.post"),
newMessage: '',
actions: {
create: function() {
var message = this.get('newMessage');
var comment = this.store.createRecord('comment', {
message : message
}); …Run Code Online (Sandbox Code Playgroud) 我定义了以下模型:
App.Post = DS.Model.extend({
title: DS.attr('string'),
comments: DS.hasMany('comment')
});
App.Comment = DS.Model.extend({
message: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
如果我使用Comment创建一个Post条目,那么存储在我的浏览器本地存储中的JSON会引用注释作为ID数组,它可以很好地工作:
...
"o3duh":{
"id":"o3duh",
"title":"How to write Ember",
"comments":[
"jf0a2"
]
}
...
Run Code Online (Sandbox Code Playgroud)
但是,当我添加另一个帖子时,JSON突然改变,以便嵌入评论:
...
"o3duh":{
"id":"o3duh",
"title":"How to write Ember",
"comments":[
{
"message":"First!"
}
]
},
"6kudl":{
"id":"6kudl",
"title":"Learning Ember is painful",
"comments":[
]
}
...
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我能预防吗?这引起了我的问题,因为一旦它变成这种嵌入格式,重新加载页面时LSAdapter就无法读取数据.
这是一个JSBin,所以你可以看到它发生在自己身上并看到完整的JSON等.要重现问题,只需创建一个帖子并添加注释,然后你可以刷新页面没有问题.然后添加另一篇文章并尝试刷新页面.
我不确定问题是否与ember-data或localstorage适配器有关.
我有一个 java 进程挂在调用中,IOUtils.toString使用以下代码:
String html = "";
try {
html = IOUtils.toString(someUrl.openStream(), "utf-8"); // process hangs on this line
} catch (Exception e) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
它无法可靠地重现这一点。它是网络爬虫的一部分,因此成功执行了该行数千次,但最终导致该进程在几天后挂起。
jstack 的输出:
2013-09-25 09:09:36
Full thread dump OpenJDK 64-Bit Server VM (20.0-b12 mixed mode):
"Attach Listener" daemon prio=10 tid=0x00007f2b1c001000 nid=0x225a waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Thread-0" prio=10 tid=0x00007f2b34122000 nid=0x187b runnable [0x00007f2b30970000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:146)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
- locked <0x00000000e3d2d160> (a …Run Code Online (Sandbox Code Playgroud) 一个项目在 Google App Engine 上运行。该项目的依赖项使用了由于安全限制而无法在 App Engine 上调用的类(它不在白名单中)。我的(非常hacky)解决方案是将该类的修改版本复制到我的项目中(匹配原始类的名称和包),不需要受限类。这适用于 dev 和 live,我假设是因为我的源出现在我的外部依赖项之前的类路径中。
为了使它更简洁,我决定将该类的修改版本放入它自己的项目中,该项目可以打包在一个 jar 中并发布给其他任何遇到此问题的人使用。
这是我的 build.gradle:
// my jar that has 'fixed' version of Class.
compile files('path/to/my-hack-0.0.1.jar')
// dependency that includes class that won't run on appengine
compile 'org.elasticsearch:elasticsearch:1.4.4'
Run Code Online (Sandbox Code Playgroud)
在我的本地开发服务器上,这工作正常,代码在运行时首先找到我的类的黑客版本。在直播中,由于某些未知原因,首先加载 elasticsearch 依赖项中的版本。
我知道在类路径中拥有同一个类的两个版本并不理想,但我希望我可以可靠地强制我的版本位于类路径的开头。有任何想法吗?或者,有没有更好的方法来解决这个问题?
java google-app-engine classpath dependency-management gradle
我正在使用firebird并尝试删除列,但是以下SQL无效:
ALTER TABLE student DROP COLUMN id;
Run Code Online (Sandbox Code Playgroud) ecilpse正在发出警告,因为它不了解与项目无关的某些文件,例如.DS_Store文件:

我有一个非常简单的javascript尝试解析我从jpeg中的元数据中提取的xml:
var xmlDoc;
try {
xmlDoc = $.parseXML(xmlString);
} catch(e) {
console.log(e);
}
Run Code Online (Sandbox Code Playgroud)
以下是抛出的异常:
Invalid XML: <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
<photoshop:Instructions>C1DDZVs9Sr+DG5R9eSc%9w</photoshop:Instructions>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:aux="http://ns.adobe.com/exif/1.0/aux/">
<aux:SerialNumber>1</aux:SerialNumber>
<aux:Lens>AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED [II]</aux:Lens>
<aux:LensID>1</aux:LensID>
<aux:ImageNumber>6651</aux:ImageNumber>
<aux:FlashCompensation>0/1</aux:FlashCompensation>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
Run Code Online (Sandbox Code Playgroud)
这个XML似乎没有任何问题.事实上,如果我直接剪切并粘贴该xml,则不会抛出任何异常:
var xmlDoc;
try {
xmlDoc = $.parseXML('<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"> <photoshop:Instructions>C1DDZVs9Sr+DG5R9eSc%9w</photoshop:Instructions> </rdf:Description> <rdf:Description rdf:about="" xmlns:aux="http://ns.adobe.com/exif/1.0/aux/"> <aux:SerialNumber>1</aux:SerialNumber> <aux:Lens>AF-S DX VR Zoom-Nikkor 18-200mm f/3.5-5.6G IF-ED [II]</aux:Lens> <aux:LensID>1</aux:LensID> <aux:ImageNumber>6651</aux:ImageNumber> <aux:FlashCompensation>0/1</aux:FlashCompensation> …Run Code Online (Sandbox Code Playgroud) 我的项目是用gradle构建的.如果我从命令行运行测试,一切正常:
./gradlew test --tests '*.UserTest'
但是当我尝试从Intelli中运行测试时,它无法运行,因为我的类没有增强.
javax.jdo.JDOUserException: Persistent class "Class com.example.Foo does not seem to have been enhanced. You may want to rerun the enhancer and check for errors in the output." has no table in the database, but the operation requires it. Please check the specification of the MetaData for this class.
Run Code Online (Sandbox Code Playgroud)
运行任务appengineEnhance没有任何区别.
java ×4
ember-data ×2
ember.js ×2
gradle ×2
javascript ×2
jquery ×2
android ×1
classpath ×1
cordova ×1
datanucleus ×1
deadlock ×1
debugging ×1
dependencies ×1
eclipse ×1
exif ×1
firebird ×1
jar ×1
macos ×1
openjdk ×1
organization ×1
parsing ×1
sql ×1
xml ×1