小编Joa*_*urz的帖子

Gradle sourceCompatibility对子项目没有影响

我的机器上安装了Java 6和7.Gradle使用1.7(使用检查gradle -v).但我需要编译我的代码以与Java 1.6兼容.据我所知文档,我可以使用该sourceCompatibility属性(并间接targetCompatibility默认为 sourceCompatibility).

所以我将以下行添加到我的构建文件中(在根级别,而不是在任何闭包中):

sourceCompatibility = 1.6
Run Code Online (Sandbox Code Playgroud)

(可以肯定的是,我也在targetCompatibility = 1.6一些试验中添加了,但这不应该有所作为)

要检查结果是否与1.6实际兼容,我将生成的jar解压缩cdWEB-INF/classes文件夹中,并javap -verbose.class我遇到的第一个文件中使用.但无论我是设置目标兼容性还是我使用1.5而不是1.6或者我是否将其指定为string('1.6'),每次javap的结果是

minor version: 0
major version: 51
Run Code Online (Sandbox Code Playgroud)

Afaik这意味着它是Java 1.7字节码,这是错误的.

有什么想法sourceCompatibility- 设置不起作用?或者javap不是检查兼容性的正确方法?

更新: 是的,这实际上是一个多项目构建,但我只检查了一个子项目的构建结果.在这个子项目的构建文件中,我做了上述更改,以确保它们实际应用.另外,我在根项目的构建文件中添加了以下内容(如@Vidya所提议的那样):

allprojects {
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
}
Run Code Online (Sandbox Code Playgroud)

但这也没有帮助.

更新2: 我在相关的build.gradle文件中使用此代码片段检查了sourceCompatibility的设置:

compileJava.doFirst {
    println "source compatibility " + sourceCompatibility
}
Run Code Online (Sandbox Code Playgroud)

它显示我的sourceCompatibility设置为1.7,虽然我试图将其设置为1.6.当我提取最简单的子项目并自行构建时,sourceCompatibility设置正确,Java Byte代码与1.6兼容.但是,即使这个子项目在多项目构建中使用时也使用了错误的sourceCompatibility.

BTW:我在一些子项目使用的插件是:java,war,jetty,gwt …

java compatibility bytecode gradle

56
推荐指数
2
解决办法
5万
查看次数

限制JSON字符串化深度

当使用JSON.stringify(或类似的东西)对对象进行字符串化时,有一种方法可以限制字符串化深度,即只有n级深入到对象树中并忽略之后的所有内容(或者更好:将占位符放在那里,表示留下了一些东西出来)?

我知道这JSON.stringify需要一个表单的替换函数,function (key, value)但我没有找到一种方法来获取当前键值对的原始对象的深度,交给更换器函数.

有没有办法使用默认的JSON.stringify实现?或者我已经达到了我应该自己实现字符串化的程度?或者是否有另一个可以推荐的具有此选项的字符串化库?

javascript json stringify

28
推荐指数
3
解决办法
1万
查看次数

JAR清单文件 - 规范和实现之间的差异

我想在我创建的库的jar中添加版本信息(可能还有一些关于jar的其他元数据).但是,我不确定使用什么属性.我发现规范以及文档说明可以有a Specification-Version和an Implementation-Version(以及两者的标题和供应商).但是没有正确解释规范和实现之间的区别.

我也看了不同的例子.

  • 文档中的一个使用了Specification-Title的可读名称和Implementation-Title的包​​名.点分隔版本号用于规范版本,而简单版本号用于实现版本.
  • gradle教程似乎只是使用Implementation-Version和一个人类可读的字符串来实现Implementation-Title
  • 另一个问题中,我找到了一个示例,其中有不同包的几个实现版本.

这里的规范和实现元数据究竟有什么区别?应该如何使用这些不同的属性(尤其是版本号)?规范和实现的供应商是如何有所不同的?

它甚至扮演了我放在那里的角色吗?

java jar manifest.mf

16
推荐指数
2
解决办法
1万
查看次数

运行NodeJS事件循环/等待子进程完成

我首先尝试了对问题的一般描述,然后更详细地说明为什么通常的方法不起作用.如果你想阅读这些抽象的解释继续下去.最后,我解释了更大的问题和具体的应用程序,所以如果你想阅读它,请跳转到"实际应用程序".

我正在使用node.js子进程来完成一些计算密集型工作.父进程执行它的工作但在执行中的某个时刻它到达了一个点,在继续之前它必须具有来自子进程的信息.因此,我正在寻找一种等待子进程完成的方法.

我目前的设置看起来像这样:

importantDataCalculator = fork("./runtime");
importantDataCalculator.on("message", function (msg) {
    if (msg.type === "result") {
        importantData = msg.data;
    } else if (msg.type === "error") {
        importantData = null;
    } else {
        throw new Error("Unknown message from dataGenerator!");
    }
});
Run Code Online (Sandbox Code Playgroud)

和其他地方

function getImportantData() {
    while (importantData === undefined) {
        // wait for the importantDataGenerator to finish
    }

    if (importantData === null) {
        throw new Error("Data could not be generated.");
    } else {
        // we should have a proper data now
        return …
Run Code Online (Sandbox Code Playgroud)

event-loop node.js

12
推荐指数
2
解决办法
1万
查看次数

Gradle:仅在任务失败时执行操作

我想打开检查失败时使用的几个"检查"和"测试"插件的报告文件.我知道无论原始任务是否被执行,我都可以使用"finalizedBy来执行另一个任务.使用这些知识,我只有在相应的任务(在这个例子中checkstyle)失败时才尝试以下方法打开报告:

task showCheckStyleResultsInBrowser(type: Exec) {
    ext.htmlFileName = "main.html"
    executable 'open'
    args 'file:///' + checkstyleMain.reports.xml.destination.parent + "/" + ext.htmlFileName
}

task showCheckStyleResultsIfFailed {
    ext.aCheckFailed = true
    doLast {
        if (ext.aCheckFailed) {
            showCheckStyleResultsInBrowser.execute()
        }
    }
}

checkstyleMain {
    finalizedBy 'showCheckStyleResultsIfFailed'
    doLast {
        // convert the xml output to html via https://stackoverflow.com/questions/20361942/generate-checkstyle-html-report-with-gradle
        ant.xslt(in: reports.xml.destination,
                 style: new File('config/checkstyle/checkstyle-noframes-sorted.xsl'),
                 out: new File(reports.xml.destination.parent, showCheckStyleResultsInBrowser.htmlFileName))

        showCheckStyleResultsIfFailed.aCheckFailed = false
    }
}
Run Code Online (Sandbox Code Playgroud)

解释(据我所知):

  • showCheckStyleResultsInBrowser实际上是打开报告的任务.您可以忽略它实际执行的操作,但如果检查任务失败则应该执行该操作
  • showCheckStyleResultsIfFailed任务声明一个属性aCheckFailed并将其初始化为true.执行时,它会检查它是否仍然为真(这意味着检查未成功完成),如果是,则使用打开报告showCheckStyleResultsInBrowser.
  • checkstyleMain是执行实际检查的任务.我对它的结果很感兴趣.但是我不知道如何去做.因此,在checkStyleMain …

gradle build.gradle

8
推荐指数
1
解决办法
5789
查看次数

如何确定在事件循环中是否还有事件已注册(奖金:多少)

我正在尝试编写一个Node.js程序来执行和监控javascript程序.我正在寻找一种方法来确定受监控的程序是否仍在"运行",即做任何有用的事情.

在我目前的方法中,当接收要测试的代码时,我启动一个新的子进程并将代码交给它.子进程检测代码使用Contextify创建Sandbox 并使用此沙箱执行代码.

sandbox.run(code)调用返回后,我知道代码的阻塞部分已完成,并且可以在UI中显示.但是,我现在不知道代码是否使用setTimeouts注册了任何计时器,或者创建了任何其他事件源,这些事件源会导致部分代码稍后退出.所以我不知道它是否真的"完蛋"了.

在Node.js中是否有办法检查事件循环上是否还有事件需要处理(或者甚至更好,剩下多少)?

我发现了另一个问题,但它只讨论了如何监视事件循环以确定节点的性能是否仍然正常.但是我对性能不感兴趣(我不在乎执行代码是否阻塞了10s或者每2分钟只执行1ms)并且我不想使用外部工具但是要了解状态内部节点本身的事件循环.那可能吗?

event-loop node.js

7
推荐指数
1
解决办法
332
查看次数

UISearchDisplayController配置"无结果"视图不与tableFooterView重叠

我有一个由系统提供的东西列表(例如品牌),这些东西不是用户可编辑的,但必须不时更改.

上下文

这些内容显示在表视图中,可使用默认的UISearchDisplayController进行搜索.但是,由于事情列表肯定不完整,我想让用户能够请求在列表中添加其他内容.为此,我在原始表视图和搜索结果表视图中添加了一个表页脚视图,该视图提供了一个发送邮件的按钮.

问题

只要搜索结果表视图仍包含条目,它就可以正常工作.我的表格页脚视图显示在搜索结果下方,一切正常.

但是,如果未找到搜索词的结果,搜索显示控制器将在表视图中心显示"无结果"标签.这通常看起来很棒,像这样:

默认

但是由于我的tableFooterView仍然显示(我想要它!),"无结果"标签与我的页脚视图重叠,看起来很糟糕:

在此输入图像描述

我认为在我的情况下我不需要"没有结果"的标签,因为我的页脚视图使得合理清楚地表明没有结果以及如何处理它.我也不介意,只要它不重叠.

我怎么能

  • 使搜索视图不显示"无结果"标签
  • 或配置它的显示方式( - >不重叠)

如果这是不可能的,我也愿意接受其他方式显示页脚视图(而不是页脚)的建议,这不会有这个问题.但我喜欢这个解决方案,因为我可以在两种情况下使用它(普通表视图和搜索结果表视图),而不必更改任何内容.

uitableview uisearchdisplaycontroller ios

6
推荐指数
1
解决办法
4644
查看次数

嵌入在其他视图中的UITableView具有错误的节标题位置

我有一个UITableView嵌入在另一个视图中,如下所示:

storbyboard显示父视图控制器和嵌入视图控制器

导航控制器以模态方式显示,因此其布局应为全屏,而不依赖于故事板的任何其他部分.如果已使用固定的自动布局约束设置配置文件视图的上半部分,如下所示:

  • 图像视图的顶部布局指南(灰色的):20pt
  • 图片查看到"交易"标签:20pt
  • "事务"标签到容器视图:20pt
  • 容器视图到底部布局指南的距离,前导和尾随空间:全部为0pt.

所以基本上,当屏幕较大时,容器视图应该填充剩余的空间.

在容器视图中,我嵌入了一个Table View(包括相应的控制器).为了使问题更加明显,我给容器视图一个绿色背景,表格视图为蓝色(这就是为什么节标题略微偏蓝).当然,我希望表视图填充整个容器视图.但这只发生在一定程度上:

应用程序截图显示表视图确实填充了整个容器视图,但节标题位置太低

因此表视图确实填充了整个容器视图(表视图的背景颜色为蓝色),但节标题位于低位.如果我向下滚动,则节标题保持在同一位置,但单元格向上移动并显示在其上方:

在表格视图中滚动后的应用程序截图

我已经尝试检查并取消选中表视图控制器的"扩展边缘"复选框,控制它是否扩展"在顶部条形图下","在底部条形图下"和"在不透明条形图下",但这没有帮助.它看起来好像表视图为导航栏和状态栏留出了空间,但它不应该,我不明白我怎么能使它正确地布局节标题和单元格.

任何想法为什么以及如何解决它?

objective-c uitableview ios uistoryboard autolayout

6
推荐指数
1
解决办法
4252
查看次数

子项目的依赖关系无法为从属项目解决(但是在构建子项目本身时可以解决)

按照“使用Gradle进行构建和测试”中的说明进行操作,我有一个这样的多项目gradle设置:

rootFolder
    build.gradle
    settings.gradle
    EMS
        build.gradle
    cloud-sdk
        build.gradle
Run Code Online (Sandbox Code Playgroud)

cloud-sdk项目依赖于几个jar,部分通过maven解决,部分通过区域jar解决:

// file: cloud-sdk/build.gradle
apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile group:'org.apache.tomcat', name:'tomcat-catalina', version:'7.0.47'
    compile group:'org.mongodb', name:'mongo-java-driver', version:'2.11.3'
    compile group:'com.google.code.gson', name:'gson', version:'2.2.4'
    compile group:'com.thoughtworks.xstream', name:'xstream', version:'1.4.6'
    compile fileTree(dir:'lib/', include:'JavaPNS_2.2.jar')
    compile fileTree(dir:'lib/', include:'gcm-server.jar')
}
Run Code Online (Sandbox Code Playgroud)

-项目EMS取决于cloud-sdk,我认为应该这样定义:

// file: EMS/build.gradle
apply plugin: 'java'

dependencies {
    compile project(':cloud-sdk')
}
Run Code Online (Sandbox Code Playgroud)

此外,我的根build.gradle和settings.gradle文件如下所示:

settings.gradle

include 'cloud-sdk', 'EMS'
Run Code Online (Sandbox Code Playgroud)

build.gradle

apply plugin: 'java'

dependencies {
    compile project(':EMS')
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不确定是否还需要依赖项compile project (':cloud-sdk') …

java gradle

5
推荐指数
1
解决办法
1175
查看次数

获取jQuery和/或DOM对象的HTML字符串

我想我已经阅读了完整的jQuery API文档,并在调试器中查看了jQuery对象和简单的DOM元素,以检查它们在运行时实际拥有的方法,但对于我的生活,我找不到一种方法来获取表示jQuery对象或DOM节点内容的html字符串.我错过了什么吗?

jQuery对象有方法html(),DOM元素具有属性,innerHTML但两者都只给出了对象的内部html.所以,如果我有这样的HTML:

<body>
    <div>
        <p>Hello World!</p>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

我使用jQuery做这样的事情var $div = $body.find("div")然后我调用$div.html()返回的字符串是"<p>Hello World!</p>".但我正在寻找一种方法让它返回"<div><p>Hello World!</p></div>"(我不关心空白).

我究竟做错了什么?获取这些对象的html表示并不困难,可以吗?

javascript jquery dom

4
推荐指数
1
解决办法
1万
查看次数

如何在 Xcode 6 调试器中访问隐藏/缩写的堆栈帧(堆栈跟踪缩写滑块去了哪里?)

在 Xcode 中

在 Xcode 6 中,当应用程序崩溃或调试器在断点处停止时,我们会在侧边栏中看到如下所示的堆栈跟踪:

Xcode 6 调试器堆栈跟踪视图

我可以单击不同的堆栈帧/方法以跳转到代码中的位置并检查局部变量。但是,属于框架的几个堆栈帧被缩写。

在 Xcode 4 中,它看起来像这样:

Xcode 4 调试器堆栈跟踪视图

请注意,底部有一个滑块。将它拖到最右边会显示所有堆栈帧并使它们都可以选择。

我需要 Xcode 6 中的该功能,所以我的问题是以下任何一个:

  • 如何显示所有堆栈帧,甚至框架帧
  • 如何访问隐藏的堆栈帧以检查局部变量(例如框架中方法调用的参数)
  • 滑块去了哪里,没有它我该怎么办?

xcode objective-c ios lldb xcode6

4
推荐指数
1
解决办法
1274
查看次数

如何使用gradle指定对tomcat库的依赖性

关于我的知识水平的一些背景知识:我目前正在尝试学习如何使用gradle构建项目.到目前为止,我没有很多构建工具的经验(几乎没有).我确实理解了一般的想法并且之前已经看过ant和maven文件但是从未自己编写过.到目前为止,我只是使用其他人构建脚本或使用Eclipse配置我的构建.所以我可能在这里完全错误的轨道,如果是这样,请指出我正确的方向.另外,遗憾的是,手工制作罐子的经验并不多.

我有一个Eclipse项目,我想编译成一个jar.必需的库jar位于我的本地文件系统上.我设法让gradle使用这些

dependencies {
    compile fileTree(dir:'lib', include:'*.jar')
}
Run Code Online (Sandbox Code Playgroud)

另外我有我的源文件src/main/java,只是apply plugin: 'java'在文件中使用build.gradle.gradle build正如我所知,试图建立项目似乎做对了.

但是,据我所知,该库应该用在运行在tomcat上的web项目中,并使用tomcat提供的一些库.我正在使用javax.servlet.http.HttpServletRequest.该项目在Eclipse中运行良好,但我在我的Eclipse构建路径中添加了tomcat库.当我签入Eclipse时,我可以看到它javax.servlet.http.HttpServletRequestservlet-api.jarTomcat库的一部分.

现在,当我构建项目时,我得到构建错误,因为java编译器找不到类,因为我没有servlet-api.jar在依赖项中指定.我想我可以以某种方式下载它(或者学习如何将它指定为外部依赖项以使gradle从某个存储库下载它)但我不确定这是否正确.

有没有办法告诉gradle使用Eclipse使用的相同库?或者其他一些告诉它所有tomcat jar的一般方法,就像我在Eclipse中简单地添加完整的Tomcat库一样?或者我真的需要另外一些这些罐子的副本,并且必须单独指定每一个?

另外,我是否需要将这些库jar添加到我的构建结果库jar中?据我所知,我需要添加任何依赖于生成的jar的jar.但话说回来,我已经读过一些地方,某些库是由tomcat自己提供的,所以它们必须是部署在它上面的任何战争的一部分.我很害怕,我被如何构建一个组合混淆罐子 -file在使用战争 -file要在部署tomcat的使用gradle这个,我不知道从哪个这些部分我的问题起源.我希望有人能够帮我解开思路并指出正确的方向,或者至少告诉我如何将Tomcat库中包含的jar添加到我的gradle依赖项中.

java eclipse tomcat jar gradle

3
推荐指数
1
解决办法
8602
查看次数

NSErrorDomain + NS_ERROR_ENUM 使类型查找不明确。为什么?

我有一个错误,过去在 Objective-C 中看起来像这样

NSString * const JKConfigurationErrorDomain;
typedef NS_ENUM(NSInteger, JKConfigurationCode) {
    JKConfigurationCodeUnknown,
    JKConfigurationCodeSomethingBad,
    JKConfigurationCodeParsing,
};
Run Code Online (Sandbox Code Playgroud)

现在,这很难在 Swift 中使用。但是从 Swift 4 开始,我们可以使用NSErrorDomainNS_ERROR_ENUM使 Swift 中的导入错误更好:

NSErrorDomain const JKConfigurationErrorDomain;
typedef NS_ERROR_ENUM(JKConfigurationErrorDomain, JKConfigurationCode) {
    JKConfigurationCodeUnknown,
    JKConfigurationErrorSomethingBad,
    JKConfigurationErrorParsing,
};
Run Code Online (Sandbox Code Playgroud)

这意味着我现在可以在 Swift 中做这样的事情:

if let myError = error as? JKConfigurationError, myError.code = .somethingBad {
    // handle it
}
Run Code Online (Sandbox Code Playgroud)

而不是必须强制转换errorNSError,然后检查它.domain然后查看.code哪个是整数等。

到现在为止还挺好。但是我的库被调用JKConfiguration并且那里已经有一个JKConfiguration对象(库的中心部分),一旦我开始使用JKConfiguration库代码中的任何地方,我就会收到一个错误:

在这种情况下,“JKConfiguration”对于类型查找是不明确的

我不明白,为什么?做什么NSErrorDomainNS_ERROR_ENUM做什么使类型查找变得不明确,我该如何解决?

我已经尝试过的: …

objective-c swift

3
推荐指数
1
解决办法
1213
查看次数