标签: java-8

将静态库与JNI链接

Java 8之前的Java版本要求本机代码位于共享库中,但我已经阅读了Java 8,可以将静态链接库与JNI一起使用.我搜索了一些例子但找不到任何例子.

如何将JNI库静态链接到我的java应用程序?

java java-native-interface static-libraries static-linking java-8

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

JDK8:获取javadoc的JDK7外观

与JDK7相比,我发现在JDK8 javadoc中难以阅读新的外观.这是一个并排的例子.

JDK7: JDK7 javadoc看

JDK8: JDK8 javadoc看

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 javadoc,JDK7 css

接下来,尝试将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: JDK8 javadoc,JDK7 css

所以,正如你所看到的,这个策略对我没有用.

UPDATE

我刚刚意识到这种变化的结果是在参数描述上使用{@code }(或<code>)标记变得毫无意义.它无论如何都没有显示出来.换句话说,如果你喜欢在过去喜欢这样做:

/**
* ...
* @param …
Run Code Online (Sandbox Code Playgroud)

javadoc maven java-8

17
推荐指数
1
解决办法
2397
查看次数

spring-core 3.2.9 + java 8

我们已经使用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)

spring java-8

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

Linux上的JDK 1.8缺少JNI包含文件

我正在尝试编译以下项目:

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 linux java-native-interface header-files java-8

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

Spring + AspectJ使用aspectj-maven-plugin编织java 8

我正在将我的项目从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 spring aspectj java-8 aspectj-maven-plugin

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

Java 8使用修改后的值重新映射

我即将掌握新的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()不可用?

java collections lambda java-8 java-stream

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

如何在Java 8中并行读取文件的所有行

我想尽快读取1 GB大文件的所有行Stream<String>.目前我正在使用Files(path).lines()它.在解析文件之后,我正在进行一些计算(map()/ filter())起初我认为这已经是并行完成了,但似乎我错了:当按原样读取文件时,我的双CPU需要大约50秒笔记本电脑.但是,如果我使用bash命令拆分文件然后并行处理它,它只需要大约30秒.

我尝试了以下组合:

  1. 单个文件,没有平行线()流~50秒
  2. 单个文件,Files(..).lines().parallel().[...]约50秒
  3. 两个文件,没有平行线()strean~30秒
  4. 两个文件,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.

java parallel-processing java-8

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

构造\ H,\ V和\ N是什么意思?

以下结构没有很好的文档记录,但它们的确适用于PHP的特定版本; 这些版本是什么,这些构造是什么以及哪些其他实现支持这个?

  • \H
  • \V
  • \N

该线程是Stack Overflow Regex Reference的一部分.

php regex pcre java-8

17
推荐指数
1
解决办法
1361
查看次数

Scala Futures和java 8 CompletableFuture

CompletableFuturesJava 8中的引入带来了scala.concurrent.Futuremonadic转换等语言功能.

  • 有什么区别,以及为什么Scala开发人员更喜欢Scala Futures而不是Java 8 CompletableFuture

  • 是否还有充分的理由scala.concurrent.Future通过akka.dispatch桥接器使用Java ?

java scala akka java-8

17
推荐指数
1
解决办法
3966
查看次数

java.time.Duration中的错误

我需要从字符串中解析持续时间.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()还是我遗漏了什么?

java java-8 java-time

17
推荐指数
2
解决办法
1720
查看次数