Java 8之前的Java版本要求本机代码位于共享库中,但我已经阅读了Java 8,可以将静态链接库与JNI一起使用.我搜索了一些例子但找不到任何例子.
如何将JNI库静态链接到我的java应用程序?
java java-native-interface static-libraries static-linking java-8
与JDK7相比,我发现在JDK8 javadoc中难以阅读新的外观.这是一个并排的例子.
JDK7:

JDK8:

JDK8占用了相当多的空间.它现在使用之前使用Arial的DejaVu字体.可能有充分的理由.不知道.
我最大的问题是在"参数"和"引发"部分中,参数与其描述之间不再存在任何视觉差异.它们都是单声道间隔字体.我认为用单声道间隔字体书写描述性文字只是丑陋.单调间隔字体用于标识符,源代码列表等的名称.(随意不同意).
在使用JDK8 javadoc工具的同时,我可以恢复JDK7样式吗?
我希望这样的事情javadoc -stylesheet jdk7.css在那里jdk7.css被包含在JDK8东西.此外,如果我决定自己定制css(不是我的东西,但可能没有其他解决方案),我不愿意在我们企业的每个构建服务器上确保新样式表的可用性.也许有一个Maven解决方案呢?
有人建议(下面)使用JDK7 javadoc css和JDK8 javadoc工具来查看是否会带回一些符合条件的Javadoc.
我通过检查Apache Commons Lang项目的源代码完成了我的测试.我只使用源代码,而不是他们的POM.这是为了确保我知道我在正确的基础上工作.
好的,首先 - 供参考 - 这是由所有JDK7工具链(JDK7 javadoc工具,JDK7 css)生成的Javadoc.这是POM片段:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<stylesheetfile>${basedir}/src/main/css/jdk7javadoc.css</stylesheetfile>
<javadocExecutable>C:/Program Files/Java/jdk1.7.0_55/bin</javadocExecutable>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
以及由此产生的Javadoc:

接下来,尝试将JDK7 css与JDK8 javadoc工具一起使用.这是POM片段:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<stylesheetfile>${basedir}/src/main/css/jdk7javadoc.css</stylesheetfile>
<javadocExecutable>C:/Program Files/Java/jdk1.8.0_05/bin</javadocExecutable>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
以及由此产生的Javadoc:

所以,正如你所看到的,这个策略对我没有用.
我刚刚意识到这种变化的结果是在参数描述上使用{@code }(或<code>)标记变得毫无意义.它无论如何都没有显示出来.换句话说,如果你喜欢在过去喜欢这样做:
/**
* ...
* @param …Run Code Online (Sandbox Code Playgroud) 我们已经使用spring 3.2.9将项目升级到java 8.一旦我们开始使用java 8功能,spring将不再启动(请参阅下面的堆栈跟踪).
我试图排除asm的旧用法并包含以下依赖项:
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>5.0.3</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-util</artifactId>
<version>5.0.3</version>
</dependency>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm-commons</artifactId>
<version>5.0.3</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
但它并没有解决问题.有没有人知道如何解决这个问题?
不幸的是我们无法升级到spring 4,因为我们使用了一些依赖项,这会使升级非常耗时.
Offending resource: class path resource [xxxx/context-test.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [xxxxx.class]; nested exception is java.lang.IllegalArgumentException: INVOKESPECIAL/STATIC on interfaces require ASM 5
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:256)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:207)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:192)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:139)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:108)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试编译以下项目:
https://github.com/entropia/libsocket-can-java
Run Code Online (Sandbox Code Playgroud)
我总是收到此错误消息?有谁知道如何解决它,它可能是Linux上的JDK 1.8.0.11中的一个错误(x64 Debian Wheezy)?
In file included from jni/de_entropia_can_CanSocket.h:2:0,
from jni/cansocket.cpp:23:
/opt/jdk1.8.0_11/include/jni.h:45:20: fatal error: jni_md.h: No such file or directory
#include "jni_md.h"
^
Run Code Online (Sandbox Code Playgroud) 我正在将我的项目从java 7迁移到java 8,我遇到的问题与使用aspectj编织有关aspectj-maven-plugin.
根据Haus文档,我可以使用在Java 6和7上运行的这个插件成功配置编织.但问题是我还没有找到任何方法来使用(并找到)支持java 8的插件版本7.我在这里看到插件7增加了java 8支持,但找不到使用它的方法.
这是我需要的配置插件:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version> <!-- AspectJ weaver plugin 7 is for java 8 (version 1.6 is for java 7) -->
<configuration>
<complianceLevel>1.8</complianceLevel>
<source>1.8</source>
<target>1.8</target>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我确认使用版本1.6的上述代码适用于Java 7,但没有运气试图使用1.7版.
你知道如何运行在Java 8上运行的spring + aspectj的weaver吗?
我即将掌握新的Java 8流和lambda选项,但仍然有一些细微之处,我还没有想到.
假设我有一张地图,其中的键是人的名字.每个名称的值是年龄和Person实例的地图.进一步假设不存在多个具有相同名称和年龄的人.
Map<String, NavigableMap<Long, Person>> names2PeopleAges = new HashMap<String, NavigableMap<Long, Person>>();
Run Code Online (Sandbox Code Playgroud)
在填充该地图(其他地方)之后,我想为每个名称生成另一个最老的人的地图.我想结束一个Map<String, Person>键,其中的键与第一个映射中的键相同,但每个条目的值是值映射的值,其中值映射的键具有最高的数字.
利用对NavigableMap键进行排序的事实,我可以这样做:
Map<String, Person> oldestPeopleByName = new HashMap<String, Person>();
names2PeopleAges.forEach((name, peopleAges) -> {
oldestPeopleByName.put(name, peopleAges.lastEntry().getValue());
});
Run Code Online (Sandbox Code Playgroud)
问题:我可以用一个Java 8流/ collect/map/flatten/etc替换上面的最后一段代码.操作产生相同的结果?在伪代码中,我的第一个倾向是:
Map<String, Person> oldestPeopleByName = names2PeopleAges.forEachEntry().mapValue(value->value.lastEntry().getValue());
Run Code Online (Sandbox Code Playgroud)
这个问题是直截了当的,没有任何技巧或奇怪 - 只是一个简单的问题,我如何充分利用Java 8!
额外奖励:让我们说NavigableMap<Long, Person>上面只是一个Map<Long, Person>.您是否可以延长第一个答案,以便收集具有最高年龄值的人,现在NavigableMap.lastEntry()不可用?
我想尽快读取1 GB大文件的所有行Stream<String>.目前我正在使用Files(path).lines()它.在解析文件之后,我正在进行一些计算(map()/ filter())起初我认为这已经是并行完成了,但似乎我错了:当按原样读取文件时,我的双CPU需要大约50秒笔记本电脑.但是,如果我使用bash命令拆分文件然后并行处理它,它只需要大约30秒.
我尝试了以下组合:
Files(..).lines().parallel().[...]约50秒Files(..).lines().parallel().[...]约30秒我使用大致相同的结果(1或2秒)多次运行这4次.它[...]只是一个映射和过滤链,toArray(...)最后用于触发评估.
结论是使用没有区别lines().parallel().由于并行读取两个文件所需的时间较短,因此分割文件会带来性能提升.然而,似乎整个文件是连续读取的.
编辑:
我想指出我使用的是SSD,所以实际上是在寻找时间.该文件总共有1658652(相对较短)的行.在bash中拆分文件大约需要1.5秒:
time split -l 829326 file # 829326 = 1658652 / 2
split -l 829326 file 0,14s user 1,41s system 16% cpu 9,560 total
所以我的问题是,Java 8 JDK中是否有任何类或函数可以并行读取所有行而不必先拆分它?例如,如果我有两个CPU内核,则第一行读取器应从第一行开始,第二行应从第一行开始(totalLines/2)+1.
以下结构没有很好的文档记录,但它们的确适用于PHP的特定版本; 这些版本是什么,这些构造是什么以及哪些其他实现支持这个?
\H\V\NCompletableFuturesJava 8中的引入带来了scala.concurrent.Futuremonadic转换等语言功能.
有什么区别,以及为什么Scala开发人员更喜欢Scala Futures而不是Java 8 CompletableFuture?
是否还有充分的理由scala.concurrent.Future通过akka.dispatch桥接器使用Java ?
我需要从字符串中解析持续时间.Java 8提供了一种以ISO-8601标准为基础的方法:
Duration.parse("p10d"); // parses as ten days
Duration.parse("pt1h"); // parses as one hour
Run Code Online (Sandbox Code Playgroud)
由于标准规定"允许通过共同协议省略'T'字符",持续时间的一些Javadoc示例中的一些例子都没有T.据他们说,以下表达式应解析为"-6小时+3分钟":
"P-6H3M"
Run Code Online (Sandbox Code Playgroud)
但是我发现所有的表达都省略了T抛出a DateTimeParseException.这是方法中的错误parse()还是我遗漏了什么?