我开发了一个基于XML的大量Java应用程序,最近在Ubuntu Linux上遇到了一个有趣的问题.
我的应用程序使用Java插件框架,似乎无法将dom4j创建的XML文档转换为Batik的 SVG规范实现.
在控制台上,我了解到发生了错误:
Exception in thread "AWT-EventQueue-0" java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.apache.batik.dom.svg.SVGOMDocument.createAttribute(Ljava/lang/String;)Lorg/w3c/dom/Attr;" the class loader (instance of org/java/plugin/standard/StandardPluginClassLoader) of the current class, org/apache/batik/dom/svg/SVGOMDocument, and the class loader (instance of <bootloader>) for interface org/w3c/dom/Document have different Class objects for the type org/w3c/dom/Attr used in the signature
at org.apache.batik.dom.svg.SVGDOMImplementation.createDocument(SVGDOMImplementation.java:149)
at org.dom4j.io.DOMWriter.createDomDocument(DOMWriter.java:361)
at org.dom4j.io.DOMWriter.write(DOMWriter.java:138)
我认为问题是由JVM的原始类加载器与插件框架部署的类加载器之间的冲突引起的.
据我所知,不可能为框架指定要使用的类加载器.它可能是破解它,但我宁愿采用一种不那么积极的方法来解决这个问题,因为(无论出于什么原因)它只发生在Linux系统上.
你们其中一个遇到过这样的问题,并且知道如何解决这个问题或至少解决问题的核心问题?
我有一个包含带时间戳的快照工件的存储库.
我想创建一个包含依赖项的程序集.这很好用.但工件名称包含时间戳.所以我想知道如何仅从程序集的文件名中删除时间戳.
我已经使用了这个dependencySet:
<outputFileNameMapping>${artifact.artifactId}-${artifact.version}.${artifact.extension}</outputFileNameMapping>
Run Code Online (Sandbox Code Playgroud)
但版本接缝已包含时间戳.那么有没有机会获得1.1.1-SNAPSHOT而不是1.1.1-20100323.071348-182?
我正在使用maven-assembly-plugin的2.2-beta-4版本.
以下形式的一些现有代码用于格式数值:
String.format( pattern, value )
Run Code Online (Sandbox Code Playgroud)
请注意,我无法更改代码本身 - 我只能更改提供给代码的格式模式.
输出默认语言环境的货币符号的格式模式是什么?基本上,我想实现以下输出:
String.format( "...", 123 ) => $ 123
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用集成的JavaFX 2.2自动测试在Java 7u6上运行的JavaFX 2应用程序.为此,我将Jemmy3和JemmyFX构建并集成到我的构建环境中.在所有相关操作系统上运行简单的冒烟测试.
作为下一步,我希望将测试作为持续部署过程的一部分来运行.由于当前CI服务器在OpenFUSE上运行,而JavaSX没有正式支持,我在虚拟机中安装了Ubuntu Server并安装了gtk2.
为了弥补缺乏完全成熟的窗口系统,我尝试在Xvnc和Xvfb上运行测试,但无济于事.
在Xvnc上,测试失败了
Prism ES2 Error - nInitialize: glXChooseFBConfig failed
Run Code Online (Sandbox Code Playgroud)
而在Xvfb上,他们给了我
Xlib: extension "RANDR" missing on display ":10".
Run Code Online (Sandbox Code Playgroud)
一篇博文建议安装gtk-engines-pixbuf以缓解第二个问题,但这只改变了错误消息中的显示数量.
现在,我召集了StackOverflow的JavaFX知识并提出要求
continuous-integration automated-tests headless xvfb javafx-2
在我们的JSF 2.0应用程序中,我们通过包含几个javascript文件<h:outputscript>.
<h:outputScript library="javascript" name="DoStuff.js"/>
Run Code Online (Sandbox Code Playgroud)
生成的html将它们称为"text/javascript".
<script type="text/javascript" src="/mycontext/javax.faces.resource/DoStuff.js.jsf?ln=javascript"></script>
Run Code Online (Sandbox Code Playgroud)
根据这个问题,"text/javascript"已经过时了,而且,htmlunit相当冗长地抱怨这种类型.当然,一切正常,我可以关闭htmlunit的日志记录,但我宁愿让JSF生成正确的类型.
有没有办法覆盖所选的类型<h:outputscript>?
JavaFX 2高度依赖于本机代码.对于我的桌面应用程序,我想为每个支持的操作系统选择最匹配的JavaFX风格,以使目标系统上的安装尽可能轻松.
由于JavaFX 2带有几个Ant任务来帮助部署,我认为这是要走的路,但我似乎已经走到了尽头.
该deploy任务生成一个JNLP文件,其中包含一个调用JavaFX安装程序的资源引用:
<resources>
<jfx:javafx-runtime version="2.1+" ref="http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp"/>
</resources>
Run Code Online (Sandbox Code Playgroud)
这显然不适用于Windows以外的操作系统,甚至可能适用于32位Windows.根据JNLP文档,可以使用依赖于操作系统的资源选择:
<resources os="SunOS" arch="sparc">
...
</resources>
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚不同平台的URL.它们是否在某处记录?还有另一种方法来实现我的目标吗?
请注意,已经存在类似的问题,但它仅限于问题的32/64位部分,并且没有得到答复.
JavaFX2的TableView功能"用户在运行时重新排序列".我想为我的应用程序中的一个特定表禁用此功能.
查看API文档,没有明显的API挂钩.但是,有一个columns属性.根据文件,它代表
TableColumns是此TableView的一部分.当用户重新排序TableView列时,将更新此列表以反映当前的可视排序.
希望我至少能够在发生更改后重置更改,我尝试添加一个侦听器以在事后重置更改.
import javafx.application.Application;
import javafx.collections.ListChangeListener;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class TableTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
TableView tableView = new TableView();
tableView.getColumns().setAll(new TableColumn(), new TableColumn());
tableView.getColumns().addListener(new ListChangeListener() {
@Override
public void onChanged(Change change) {
if (change.wasPermutated()){
change.reset();
}
}
});
stage.setScene(new Scene(tableView));
stage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,IllegalStateException当我要求时,听众会中止wasPermutated.
有没有办法防止重新排序,或者至少以编程方式还原它?
我正在开发一个使用SSHJ进行SFTP传输的库.由于请求频繁,我想知道我是否可以保持连接打开.
显然,如果服务器频繁超时,这将无法实现.由于我无法控制服务器,因此我必须保持连接处于活动状态:使用常规SSH客户端,我可以指定一个ServerAliveInterval并让客户端为我执行此操作.
我想用SSHJ做同样的事情,但我不知道要发送什么消息.
该SSH手册只是说ServerAliveInterval
设置超时间隔(以秒为单位),之后如果没有从服务器收到数据,ssh(1)将通过加密通道发送消息以请求服务器响应.
所以我想知道:发送了什么消息?我怎么能通过SSHJ重现这个消息?
我想在Nexus中已发布的版本中添加两个zip。
从本质上讲,它们是该应用程序的压缩演示,也是该应用程序的扩展版本。
使用Deploy插件,我在pom中定义了两个执行,每个文件一个,并将它们绑定到部署阶段。这是演示的一个:
<execution>
<id>deploy-essential</id>
<phase>deploy</phase>
<goals>
<goal>deploy-file</goal>
</goals>
<configuration>
<file>${project.build.directory}/${project.artifactId}-${project.version}-demo.zip</file>
<groupId>${project.groupId}</groupId>
<artifactId>myproject</artifactId>
<version>${project.version}</version>
<classifier>demo</classifier>
<repositoryId>nexus</repositoryId>
<url>${targetrepository}</url>
<generatePom>false</generatePom>
</configuration>
</execution>
Run Code Online (Sandbox Code Playgroud)
我希望Maven在执行此命令时上传文件并将元数据更新为给定的G / A / V坐标。但是,相反,它会将给定文件及其包含完整版本的姊妹文件上载到给定坐标,然后将它们两者再次上载到其原始坐标。
然后继续为第二次执行再次执行所有这些操作。这是我的日志摘录:
[INFO] --- maven-deploy-plugin:2.7:deploy-file (deploy-demo) @ bundle ---
Downloading: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/maven-metadata.xml
2 KB
Downloaded: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/maven-metadata.xml (2 KB at 4.8 KB/sec)
Uploading: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/myproject-1.2.6-20121130.102624-5-demo.zip
...
Uploaded: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/myproject-1.2.6-20121130.102624-5-demo.zip (13032 KB at 23105.2 KB/sec)
Downloading: http://nexus/repositories/snapshots/mygroup/myproject/maven-metadata.xml
533 B
Downloaded: http://nexus/repositories/snapshots/mygroup/myproject/maven-metadata.xml (533 B at 34.7 KB/sec)
Uploading: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/maven-metadata.xml
2 KB
Uploaded: http://nexus/repositories/snapshots/mygroup/myproject/1.2.6-SNAPSHOT/maven-metadata.xml (2 KB at 89.4 KB/sec) …Run Code Online (Sandbox Code Playgroud) 如何使用getElementsByTagName获取标记名称的值.我的Xml文件是
<parent>
<method>name</method>
....
....
</parent>
Run Code Online (Sandbox Code Playgroud)
在这里,我想单独采用方法的价值.我使用了以下代码,但我得到的是对象
File fXmlFile = new File(FILE_XML);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getElementsByTagName("method").toString();
Run Code Online (Sandbox Code Playgroud) java ×6
javafx-2 ×3
32bit-64bit ×1
artifacts ×1
assemblies ×1
classloader ×1
deployment ×1
headless ×1
javascript ×1
jnlp ×1
jsf-2 ×1
linkageerror ×1
linux ×1
locale ×1
maven ×1
maven-2 ×1
maven-3 ×1
mime-types ×1
ssh ×1
sshj ×1
tableview ×1
timeout ×1
versioning ×1
w3c ×1
xml ×1
xvfb ×1