我有一个JAR文件,其中包含该应用程序的应用程序和配置文件.应用程序从类路径(使用ClassLoader.getResource())加载配置文件,并使用烘焙到JAR文件中的配置文件完全满足其依赖关系.
有时我希望应用程序以稍微不同的配置运行(特别是我想覆盖JDBC URL以指向不同的数据库)所以我创建了一个新的配置文件,将其存储在正确的目录结构中(这意味着在/config类路径条目的目录),我想做这样的事情:
java -cp new-config:. -jar application.jar
Run Code Online (Sandbox Code Playgroud)
但我不能让类new-config路径在应用程序JAR的内容之前有路径条目.它是硬编码的,JAR的内容始终是类路径中的第一件事吗?
答案:使用Simple Build Tool制作独立jar似乎是我需要的,但它没有足够的信息给我,所以这是一个后续.
(1)如何根据需要调整答案?我不明白需要改变什么.
(2)我运行什么命令来创建独立jar?
(3)创建后,我在哪里可以找到它?
我尝试过的:
将链接的答案中的代码逐字地粘贴到我的:project/build/dsg.scala文件中.该文件现在有一个
class ForkRun(info: ProjectInfo) extends DefaultProject(info)
(从之前,用于在与SBT分开的VM中运行项目)和新的:
trait AssemblyProject extends BasicScalaProject
从链接的答案.
我也试过粘贴体(所有defs和lazy val的AssemblyProject成体ForkRun.
要创建一个jar我package在SBT提示符下运行并得到:
[info] Packaging ./target/scala_2.8.1/dsg_2.8.1-1.0.jar ...
[info] Packaging complete.
Run Code Online (Sandbox Code Playgroud)
所以我尝试dsg_2.8.1-1.0.jar通过shell 运行shell:
java -jar dsg_2.8.1-1.0.jar
Run Code Online (Sandbox Code Playgroud)
但我得到:
Failed to load Main-Class manifest attribute from
dsg_2.8.1-1.0.jar
Run Code Online (Sandbox Code Playgroud)
这可能是因为我的项目中有多个入口点吗?当我run从SBT提示执行时,我从列表中选择.也许我需要在创建包时指定默认值?
我已下载,jbpm-installer-3.2.7.jar但我不知道如何安装或运行该文件.
如果我双击它,它会打开winrar.我尝试通过命令提示符安装,但我收到以下错误:
C:\Documents and Settings\ccuser\Desktop\manoj>java -jar jbpm-installer-3.2.7.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/izforge/izpack/installer/Installer (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Run Code Online (Sandbox Code Playgroud) 我想制作一个我用Java fx 2.0制作的项目的可执行文件.谁可以帮我这个事?
我正在尝试做类似的事情
URL clientks = com.messaging.SubscriptionManager.class.getResource( "client.ks" );
String path = clientks.toURI().getPath();
System.setProperty( "javax.net.ssl.keyStore", path);
Run Code Online (Sandbox Code Playgroud)
其中client.ks是存储在我正在运行的jar文件中的com/messaging中的文件.
读取javax.net.ssl.keyStore的东西需要一个到jar中的client.ks文件的路径.如果可能的话,我宁愿不提取文件并放入客户端的机器上.那么可以在jar中引用一个文件吗?
这不起作用,因为getPath()返回null.还有另一种方法吗?
目前,我有一个已部署的可执行jar文件,可在崩溃时创建大型(7+ Gb)minidump文件.我想有一个文本表示导致崩溃的原因,而不是JVM状态的二进制文件.我已经尝试使用此CodeRanch帖子中的信息,我在Java文档中找到的文档似乎没有帮助.
我也引用了这个问题,但没有明确的答案.
是否有一种我不知道的典型方式?
我们知道这jar是一种压缩的归档文件格式,它充当已编译的java类和conf文件的容器.据我所知,要从压缩容器文件中读取任何内容,首先需要将它们提取到某处.
那么JVM如何在jar中执行类?它是否将jar的内容提取到临时位置然后执行类?
我正在尝试启动为 Spring Boot 项目构建的 jar 文件。首先我做了:
mvn clean package spring-boot:repackage
Run Code Online (Sandbox Code Playgroud)
然后我尝试启动 jar 文件,但出现以下错误:
线程“main”中出现异常 java.lang.UnsupportedClassVersionError:it/sysdata/helios_backend_admin/HeliosAdminBackendApplication 已由更新版本的 Java 运行时(类文件版本 55.0)编译,此版本的 Java 运行时仅识别类文件版本到 52.0 在 java.lang.ClassLoader.defineClass1(本机方法) 在 java.lang.ClassLoader.defineClass(未知来源) 在 java.security.SecureClassLoader.defineClass(未知来源) 在 java.net.URLClassLoader.defineClass(未知来源)在 java.net.URLClassLoader.access$100(未知来源) 在 java.net.URLClassLoader$1.run(未知来源) 在 java.net.URLClassLoader$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) )在 java.net.URLClassLoader.findClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93) 在 java.lang.ClassLoader .loadClass(来源不明)在org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)在org.springframework.boot.loader.Launcher.launch(Launcher.java:87)在org.springframework.boot .loader.Launcher.launch(Launcher.java:50) 在 org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
我检查过,java版本到处都是11(至少从我所看到的)。这是 pom:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>it.sysdata</groupId>
<artifactId>helios_backend_admin</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>helios-admin-backend</name>
<packaging>jar</packaging>
<description>Helios Backend …Run Code Online (Sandbox Code Playgroud) 我正在尝试将jython程序打包到一个可执行jar中,用户只需双击即可运行而无需提前安装jython.最后,我想包含一个我用jar编写的附加库,但是目前我只是尝试打包一个简单的程序并让它从jar运行.
我已经尝试按照"使用Jar方法"部分中的jar说明进行操作:Jython FAQ:使用Jar方法
我还在这里看了25-28幻灯片:Jython Update 2012幻灯片
最后在这里: stackoverflow问题:使用Jython将我的Python脚本分发为Jars
我在运行OS X 10.8.3的mac上安装了jython 2.5.3,jvm 1.6和python 2.7.3.
这些是我创建jar并运行它的步骤:
zip -r jython_copy.jar Lib (其中Lib是jython安装目录中的文件夹)cp myJythonProgram.py __run__.py(myJythonProgram.py不包含'if name == main '行)zip jython_copy.jar __run__.pyexport CLASSPATH=/path/to/my/app/jython_copy.jar:$CLASSPATH我尝试使用以下三种方法运行jar:
java org.python.util.jython -jar myapp.jarjava -cp myapp.jar org.python.util.jython -jar myapp.jarjava -jar myapp.jar -jar myapp.jar如果我的程序不使用任何import语句,则此方法有效.
但是我遇到了一个问题,当我运行jar时无法找到一些python包.例如,当我from random import random在程序中包含该行时,我收到错误"ImportError:No module called random" .从javax.swing,java.awt,time或math导入时,程序中的行不会发生错误.
另外,我尝试用我的库和一个jython程序打包一个jar,它使用前面的步骤导入我的库以及以下附加步骤:
zip jython_copy.jar myLibrary.jarjar ufm jython_copy.jar othermanifest.mfothermanifest.mf只包含该行Class-Path: ./myLibrary.jar.
这也给出了错误"ImportError:No module named myLibrary"
如果我对错误或我应该采取的其他步骤有所了解,我将不胜感激. …
我想在java中构建一个可运行的jar.我需要在jar中包含一些文件,这样当我执行jar时,文件会自动从java类中读取.因此,我在项目中创建了一个文件夹,并从项目中引用了这些文件.我在一些教程后创建了jar文件,但是我无法将这些外部文件包含在我的jar文件中.请告诉我有关使用外部文件创建可运行jar的信息.
我的文件结构是
Test
|
|
-------src
| |
| default package
| |
| |
| test1.java
|
-------FileFOlder
| |
| |
| abc.txt
Run Code Online (Sandbox Code Playgroud)
我访问的abc.txt在test1.java类.我的代码是,
public class test1 {
public static void main(String[] args) throws IOException {
char [] read = new char[20];
String path = new File(".").getCanonicalPath();
path = path+"\\Newfolder\\abc.txt";
System.out.println(path);
File nF = new File(path);
FileReader fR = new FileReader(nF);
fR.read(read);
for(char c : read){
System.out.print(c);
}
fR.close();
System.out.println(" Hi..This is test program …Run Code Online (Sandbox Code Playgroud)