我有一个java程序,它从数据库中读取大量输入数据,对其进行操作,然后将数据写回另一个数据库(使用ODBC驱动程序,excel和访问数据库,在新的Windows 7机器上).该程序从eclipse运行大约需要17分钟,但是当我创建一个可执行的.jar文件时,它需要额外的10分钟才能运行(总共27分钟).
到目前为止,我发现慢速jar文件(通过搜索SO和谷歌)的两个原因是它们被压缩,并且写入命令提示符(或错误日志)比在eclipse中的控制台需要更长的时间.我尝试创建一个未压缩的jar文件,它只加速了大约10秒钟(这可能是完全随机的,因为运行时间大约相差30秒).我System.out.println()在程序中只有大约10个命令,因此不应该减慢它的速度.
关于是什么导致它运行得如此之慢的任何想法,如果有任何方法我可以再次加速?如果有任何其他可能相关的细节我应该包括在内,请告诉我.谢谢!
使用Maven构建可执行JAR时,如何指定执行JAR时使用的JVM参数?
我可以使用指定主类<mainClass>.我怀疑JVM参数有类似的属性.特别需要指定最大内存(例如-Xmx500m).
这是我的程序集插件:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.me.myApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我们在eclipse中的项目大致显示以下文件夹:
application
- src
- JRE System Library [1.6]
- Referenced Libraries
- lib
- rsc
Run Code Online (Sandbox Code Playgroud)
在我们的项目中,我们想使用File> Export ...> Executable JAR
好吧,除了一些例外:如果我们想运行我们的application.jar,我们仍然需要将文件夹rsc /复制到application.jar的相同位置.
在rsc /中,我们有其他文件夹来分隔不同的部分.基本上,我们使用代码加载碎片(有点改变,但路径样式是正确的)
strUrl = "file:rsc/properties/Constants.properties";
url = new URL(strUrl);
ImageIcon icon = new ImageIcon(url);
Run Code Online (Sandbox Code Playgroud)
我可以右键单击rsc /> Build Path> Use as Source Folder.
但这不起作用,因为eclipse不会自动将rsc文件夹复制到bin/-folder中.然后我们不能再从终端运行它(没有打包到jar)
编辑:为什么eclipse无法正确处理?为什么"嵌套"输出文件夹有问题?在Build Path对话框的Source-tab中,我可以轻松添加rsc/-folder,输出文件夹设置为bin/rsc /,但它似乎无法放置嵌套文件夹...
编辑2:现在我已经能够创建一个xml文件来使用ant构建东西,并以某种方式设法将rsc文件夹包含在jar中.由于相同的错误仍然无法运行.我是否真的需要检查它们是否在JAR中的资源路径?JAR的内容现在如下:
META-INF/
META-INF/MANIFEST.MF
configurator/
controller/
editor/
gui/
logic/
networking/
rsc/
rsc/gamesettings/
rsc/levels/
rsc/pics/
rsc/properties/
util/
Run Code Online (Sandbox Code Playgroud)
但Java仍然讨厌我,并抛出java.io.FileNotFoundException: rsc/properties/Constants.properties大约100行的堆栈跟踪.
任何人都知道如何做到这一点?感谢和问候
是否有任何集成良好的应用程序管理堆栈,允许构建,部署和更新.war作为服务器运行的非Java应用程序?例如,作为服务器的消息使用者(但不是Web服务器并且没有Servlet),或.jar嵌入了Jetty的可执行文件?
构建和部署.wars非常简单:Maven有战争原型,Jenkins有一堆插件用于将.war文件部署到各种应用程序服务器,其中大多数都接受在运行时上传新的Web应用程序.像Elastic Beanstalk这样的工具使这个过程更加容易,与服务器环境的管理联系在一起.
相比之下,部署可执行文件.jar似乎重新发明了轮子.人们需要理清阴影依赖关系的最佳方法,并使用大量的Maven插件创建可执行的人工制品,将此工件存放在某处,然后找到在目标服务器上安装它的方法,并在必要时替换/升级它(Debian软件包)这将是一种方式).
这对我来说似乎非常"手动",以至于将应用程序部署.war到应用程序服务器似乎是有利的,即使它们不适合这样的环境,只是为了获得工具支持的好处.
我一直在努力将我的javafx应用程序转换为jar文件.我正在使用Java 1.7 update 7.
Oracle有一些信息,但它似乎分散在各处.Intellij几乎正在完成这项工作,但我收到以下错误:
java.lang.NoClassDefFoundError: javafx/application/Application
Run Code Online (Sandbox Code Playgroud)
这似乎说我需要告诉java jfxrt.jar在哪里...如果我将这个jar添加到我的类路径信息中为intellij中的清单构建 - ctrl + shift + alt + s - >工件 - >输出布局选项卡 - >类路径,然后我得到另一个错误:
Could not find or load main class com.downloadpinterest.code.Main
Run Code Online (Sandbox Code Playgroud)
在我的类路径中包含jfxrt.jar似乎很奇怪...
我也试过创建一个蚂蚁脚本,但我觉得IntelliJ是90%的方式 - 我只需要一些帮助来弄清楚为什么我需要包含jfxrt.jar,以及为什么我的主类没有找到(我猜我需要以某种方式将它添加到类路径?).
谁能让我知道发生了什么?我之前有一个基本的gui工作正常,但JavaFX似乎让生活变得复杂!
我有java项目,很多类都有主要方法(仅用于测试目的).当我通过Eclipse创建可执行jar文件时,Eclipse将自动选择哪个文件是主类.(而且经常是错的).
还有另一种方法是在Jar文件中清除文件中的主类.但是,它非常方便.所以,我的问题是:在创建Jar文件时如何手动选择.
谢谢 :)
假设我们有一个Java 应用程序,而不是一个可以通过Maven central获得的库.例如,一个这样的项目是jol,它在Maven central中有相应的CLI接口.
据我所知,与库的主要区别在于相应的JAR文件包含一个具有适当main()方法的类,以及可选Main-Class:的JAR清单中的相关头.如果将此类工件用作项目的依赖项,Maven将很乐意将JAR文件及其依赖项下载到本地存储库,就像对任何其他工件一样.
是否可以使用Maven直接执行这样的应用程序,而无需设置Maven项目?
通过设置JVM类路径以使依赖项可用,该exec:java插件可以很好地用于本地项目.用户不必担心JAR或.class文件位置等.不幸的是,从我所知道的,它还需要一个封闭的Maven项目,因此不能从任意命令行提示中使用它.
我正在为我的webapplication编写客户端,并且我使用我的开发人员证书签署了发布jar,如何验证请求休息服务来自我签名的jar?
我已经使用maven(mvn clean compile assembly:single)和以下pom文件从我的spark应用程序构建了一个jar文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mgm.tp.bigdata</groupId>
<artifactId>ma-spark</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ma-spark</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.1.0-cdh5.2.5</version>
</dependency>
<dependency>
<groupId>mgm.tp.bigdata</groupId>
<artifactId>ma-commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>mgm.tp.bigdata.ma_spark.SparkMain</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
如果我在终端上使用java -jar ma-spark-0.0.1-SNAPSHOT-jar-with-dependencies.jar运行我的应用程序,我会收到以下错误消息:
VirtualBox:~/Schreibtisch$ java -jar ma-spark-0.0.1-SNAPSHOT-jar-with-dependencies.jar
2015-Jun-02 12:53:36,348 [main] org.apache.spark.util.Utils
WARN - Your hostname, proewer-VirtualBox resolves to a …Run Code Online (Sandbox Code Playgroud) 我有一个.jar文件,当我提取它时,它给了我该jar文件中存在的所有.class文件.
我使用http://jd.benow.ca/工具反编译了所有的.class文件,但我希望所有.class文件都保存到.java文件中.
现在我只能看到代码,但扩展名没有转换为.java.
任何人请帮助我.
executable-jar ×10
java ×8
jar ×5
eclipse ×3
maven ×2
.class-file ×1
ant ×1
apache-spark ×1
artifact ×1
automation ×1
deployment ×1
execution ×1
java-6 ×1
javafx ×1
maven-2 ×1
performance ×1