小编pet*_*erh的帖子

Java MappedByteBuffer.isLoaded()

在我看来,MappedByteBuffer.isLoaded()始终false在Windows上返回.当我在BSD Unix上测试时,我得到true了相同的测试数据.

我应该担心吗?isLoaded()无论我使用什么尺寸的数据,我都无法在Windows上返回true.

这是我的测试代码供参考:

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MemMapTest {

    private static final String FILENAME = "mydata.dat";
    private static final int MB_1 = 1048576;  // one Mbyte
    private static final byte[] testData = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};  // len = 10 bytes

    public static void main(String[] args) throws FileNotFoundException, IOException {

        // Create a …
Run Code Online (Sandbox Code Playgroud)

java nio bytebuffer

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

在ByteBuffer上缺少一些绝对方法

也许我正在以错误的方式解决这个问题,但我错过了一些绝对的 put方法ByteBuffer.

如果你看一下,ByteBuffer你会发现大多数put方法都有绝对变量和相对变量.

除了:

  • byte数组的部分写入ByteBuffer.
  • 写一个ByteBufferByteBuffer.

..而且我需要那些.

要明确ByteBuffer有方法:

 put(byte[] src, int offset, int length)
 put(ByteBuffer src)
Run Code Online (Sandbox Code Playgroud)

但缺乏:

 put(int index, byte[] src, int offset, int length)
 put(int index, ByteBuffer src)
Run Code Online (Sandbox Code Playgroud)

我有理由为什么我不想移动缓冲区的位置指针,因此我只想使用绝对put方法.

知道为什么这些方法被遗漏了吗?

我当然可以在不移动缓冲区位置指针的情况下模仿丢失的方法,但这将涉及在源字节上循环.Javadoc明确指出,这些方法(可能)比移动更有效,而不是循环并逐个移动字节.我相信Javadoc,因为我的测试表明相同.我需要从实施中尽可能多地挤出速度,因此我当然倾向于利用我可以获得的任何批量方法......如果它们存在的话.

Incedentially ByteBuffer也缺少get部分字节数组移动的绝对方法.但我目前实际上并不需要这样的方法.但又奇怪的是它不存在.

java

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

Maven javadoc - 如何包含集中资源

我正在尝试将集中资源(例如图像文件,js文件)包含到我的Maven生成的javadoc中.这种集中资源将来自依赖.(在我的情况下,我希望始终包含某些资源,Javascript文件,允许在Javadoc中对示例代码进行很好的语法突出显示,以及使用特殊的样式表)

如果您在本地将资源包含在项目中,那么有大量有关如何执行此操作的信息.这不是我想要的,因为我需要为我公司的每个项目做这件事.因此,配置需要进入公司范围的POM文件,我们公司的所有项目都从该文件继承.

请注意,对于样式表,这很容易做到,因为Maven插件允许此文件来自依赖项.我正在寻找类似的东西,除了'资源'.基本上,我不得不将像公司徽标这样的东西复制到每个项目中似乎很愚蠢.这就是我想要避免的.

如果Maven Javadoc插件没有直接支持这个(我不知道是不是这样),那么我猜测另一种方法可能是使用Maven Dependency Plugin将我的集中式javadoc资源复制到项目中.然而,这种方法至少有两个缺点:

  1. 这种依赖不是项目的真正依赖,不应该这样说.它是maven-javadoc-plugin的依赖项,而不是项目本身的依赖项.

  2. 我需要找到一种方法,以便只在请求javadoc生成时才将依赖项复制到项目中.

请帮忙.

javadoc syntax-highlighting maven

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

Maven:从命令行执行和在config中执行多次

我想从命令行执行插件目标,但执行插件的多次执行.为此,我的POM看起来像这样:

<plugin>
    <groupId>xxx.yyy</groupId>
    <artifactId>zzz</artifactId>
    <version>1.1.6</version>
    <executions>
        <execution>
            <id>default-cli-1</id>
            <goals>
                <goal>mygoal</goal>
            </goals>
            <configuration>
                .... config1 ....
            </configuration>
        </execution>
        <execution>
            <id>default-cli-2</id>
            <goals>
                <goal>mygoal</goal>
            </goals>
            <configuration>
                .... config2 ....
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

我想做的是:

mvn xxx.yyy.zzz:mygoal
Run Code Online (Sandbox Code Playgroud)

然后执行两次执行.但我无法弄清楚如何.

我知道<id>从命令行执行时我不能使用.这就是它的意思default-cli.然而,<id>必须是唯一的,<executions>这意味着我只能把它default-cli放在一个execution.

Maven 3.0.5版.

java maven-3 maven

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

Maven 对 zip 工件的依赖

我有一个项目需要依赖于另一个项目生成的 ZIP 文件。那个“其他项目”不在我的控制之下。正确构建我的项目需要 ZIP 文件。执行我的项目不需要它。我需要 Maven 为我下载 ZIP 文件。

我目前创建了对 ZIP 工件的依赖,如下所示:

<dependency>
    <groupId>org.foo</groupId>
    <artifactId>zeus</artifactId>
    <version>1.1</version>
    <type>zip</type>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我的问题是范围。如果我使用任何东西,但test它会带来很多来自“其他项目”的传递依赖性,这会搞砸我自己的项目。使用testas 范围实际上可以完成这项工作,但它在我的 IDE 中显示为测试依赖项。所以我觉得我做错了什么。这不是测试依赖性!

我查看了可用的 Maven 范围(“编译”、“提供”等),但似乎找不到与我的用例相匹配的范围。难道我做错了什么?

java maven

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

以编程方式启用 JDK 类的日志记录

好吧,案例很简单。我需要能够以编程方式启用/禁用 JDK 类 (HttpURLConnection) 的日志记录。

public class HttpLoggingTest {

    /**
      Just a dummy to get some action from HttpURLConnection
    */
    private static void getSomething(String urlStr) throws MalformedURLException, IOException {
        System.out.println("----- " + urlStr);
        HttpURLConnection conn = (HttpURLConnection) new URL("http://www.google.com").openConnection();

        for (Entry<String, List<String>> header : conn.getHeaderFields().entrySet()) {
            System.out.println(header.getKey() + "=" + header.getValue());
        }
        conn.disconnect();

    }

    public static void main(String[] args) throws MalformedURLException, IOException {

        // HERE : Enable JDK logging for class
        // sun.net.www.protocol.http.HttpURLConnection
        getSomething("http://www.goodle.com");

        // HERE: Disable JDK logging for …
Run Code Online (Sandbox Code Playgroud)

java logging

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

适用于 Solaris X64 的 Java9

Java 9 昨天发布了,我很想通过一个恰好在 Solaris x64 服务器上的测试套件来试一试。但是,我不知道如何为 Solaris X64 下载 Java9 (JRE)。这是 Java 9 的样子:

Java 9 下载

这是 Java 8 的样子: Java 8 下载

根据,Solaris x64是支持的平台。但根据这个,Solaris x64上不再是一个认证为Oracle的Java平台。(Java 8 的等效列表在这里

我不明白这让我何去何从。

问题:

  • Oracle 是否正式放弃对 Solaris x64 的支持?有没有就这个话题进行交流?
  • 其实我可以从Oracle的网站下载Java 9的用于Solaris x64的完美复制,只需通过更换sparcv9x64在URL中。用于生产目的是否安全?使用会不会有法律问题?

2019 年 1 月更新

与 Solaris X64 相关的各种 JDK 发行版概述:

  • BellSoft 的 Liberica支持 Solaris X64(以及 Solaris SPARC)

  • 采用 OpenJDK似乎正在放弃对 Solaris 的支持。对于 JDK8,他们确实支持 Solaris,但仅支持 SPARC,而不支持 Intel(奇怪的选择)。对于 JDK 的更高版本,根本没有提到 Solaris。

  • Zulu, by Azul …

oracle solaris java-9

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

带有 jib (Docker) 的 JRE 版本

我正在尝试使用 Google 的Jib 项目Jib Maven Plugin构建 Docker 映像。

我不明白如何指定 JRE 版本。

我知道我可以在插件的 config 中进行自定义,例如:

<configuration>
  <from>
    <image>gcr.io/distroless/java</image>
  </from>
</configuration>
Run Code Online (Sandbox Code Playgroud)

但这对于将使用的实际 JRE 版本意味着什么?如果我想具体说 JRE 8u172 怎么办?

Jib 项目将此声明为一个功能:

可重现- 使用相同内容重建容器映像始终生成相同的映像。

因此我假设必须有某种方法来锁定 JRE 版本?

级别:Java 和 Maven 高级,Docker 新手。

java docker jib

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

Oracle JDBC Thin:强制网络加密

问题是如何使用 Oracle JDBC Thin 驱动程序并仅在 URL 中指定加密来强制加密?

据了解,我们需要将Oracle Net参数设置oracle.net.encryption_clientrequired。(参考链接

供参考:我们目前以 TNS 格式指定 Oracle JDBC URL,例如:

DESCRIPTION = 
   (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = tcp)(HOST = myora1.corp.net)(PORT = 1521))
       (ADDRESS = (PROTOCOL = tcp)(HOST = myora2.corp.net)(PORT = 1521)))
   (FAILOVER=ON)
   (CONNECT_DATA = (SERVER = dedicated)(SERVICE_NAME = foobar))
Run Code Online (Sandbox Code Playgroud)

它会转换为以下 JDBC URL 字符串:

jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = tcp)(HOST = myora1.corp.net)(PORT = 1521))(ADDRESS = (PROTOCOL = tcp)(HOST = myora2.corp.net)(PORT = 1521)))(FAILOVER=ON)(CONNECT_DATA = (SERVER = dedicated)(SERVICE_NAME …
Run Code Online (Sandbox Code Playgroud)

java oracle jdbc

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

将 jaxws-maven-plugin 与 -clientjar 选项一起使用

我正在使用jaxws-maven-plugin为 Web 服务消费者应用程序执行 wsimport。我正在使用-clientjarwsimport 上的选项,该选项是 2010 年随 JAX-WS 2.2.2 RI 引入的。我这样做是因为我想将 WSDL 捆绑在 jar 中。

我在制作 pom 时没有任何问题。对于插件配置我做了类似的事情:

<configuration>
    ...
    <args>
        <arg>-clientjar</arg>
        <arg>bundled-wsdl.jar</arg>
    </args>
</configuration>
Run Code Online (Sandbox Code Playgroud)

当我执行构建时,我创建了 jar,让我们调用它myapp.jarbundled-wsdl.jar其中包含文件。在bundled-wsdl.jar的 META-INF 目录中,我找到了 wsdl 和 xsd,就像我喜欢的那样。我对使用该选项生成的 java 代码也非常满意-clientjar。到目前为止,一切都很好。

不过这个东西应该在myapp.jar的 META-INF 里吧?事实上,它位于bundled-wsdl.jar的 META-INF 中,这对我没有多大帮助。

有趣的是,我实际上在myapp.jarMETA-INF 中获取了一个 wsdl 文件,这使得该应用程序能够实际工作。我不知道它是如何到达那里的。此外,xsd 文件不存在,仅在bundled-wsdl.jarMETA-INF 中。

基本问题是如何-clientjar在 Maven 项目中正确使用 wsimport 选项?

Java 1.7.0_45。

java wsimport maven

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

如何退出NetBeans平台GUI应用程序?

如何在XML文件中声明TopComponent时以编程方式正确退出NetBeans平台应用程序?

java netbeans

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

如何配置JMX仅绑定到localhost?

我在Centos6上使用JDK8运行Tomcat8.我使用以下选项启用JMX:

CATALINA_OPTS="${CATALINA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9123 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=true"
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我检查打开了哪些端口时,我发现这些端口会监听所有IP:

netstat -plunt | grep java
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 :::60555                            :::*                LISTEN      22752/java
tcp        0      0 ::ffff:127.0.0.1:8080               :::*                LISTEN      22752/java
tcp        0      0 :::9123                             :::*                LISTEN      22752/java
tcp        0      0 :::40867                            :::*                LISTEN      22752/java
Run Code Online (Sandbox Code Playgroud)

我想如果我配置-Dcom.sun.management.jmxremote.local.only=true所有端口应该只绑定到localhost(::ffff:127.0.0.1将出现在所有端口之前).

如何配置JMX仅绑定到localhost?

添加

我不创建JMX我使用Tomcat JMX : https://tomcat.apache.org/tomcat-8.0-doc/monitoring.html.

java jmx

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