我有一个不寻常的情况,我需要在可执行jar的清单中添加一个任意的类路径条目(指向一个jar文件).(这适用于Swing桌面应用程序.)
maven-jar-plugin使用maven依赖项为jar清单生成"Class-Path"条目,并且似乎没有任何添加任意条目的方法.
我还看了使用"-classpath"参数将任意类路径条目硬编码到启动应用程序的批处理文件中,但我无法弄清楚如何让Maven将类路径过滤到批处理文件中.
我想知道如何为我的Spring Boot应用程序外部化所有jdbc驱动程序,我不想在构建应用程序后将jdbc驱动程序插入到我的胖jar中.
有没有办法设置java vm参数,通知jar执行包含哪个外部文件夹?或者可能存在某种弹簧属性.
例如:
java -DLib=file:\\\c:\Drivers -jar sample.jar
Run Code Online (Sandbox Code Playgroud) 我使用了Maven中的指令- 如何在jar中添加任意类路径条目以向Class-Path属性添加任意条目.这是我的MANIFEST.MF档案:
Manifest-Version: 1.0
Class-Path: jace-runtime.jar
Main-Class: org.jace.examples.Test
Run Code Online (Sandbox Code Playgroud)
我定义了org.jace.examples.Test,如下所示:
public class Test
{
public static void main(String[] args)
{
System.out.println("classpath: " + System.getProperty("java.class.path"));
System.out.println("PeerExample: " + Class.forName("org.jace.util.ShutdownHook"));
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里org.jace.util.ShutdownHook定义jace-runtime.jar.当我调用时,java -jar peer_example1.jar我得到以下输出:
classpath: peer_example1.jar
线程"main"中的异常java.lang.ClassNotFoundException:org.jace.util.ShutdownHook
换句话说,Java正在将可执行JAR文件添加到类路径中但忽略不计Class-Path.如果我调用java -cp jace-runtime.jar;peer_example1.jar org.jace.examples.Test我得到预期的输出:
classpath: jace-runtime.jar;peer_example1.jar
有任何想法吗?
我正在构建一个软件系统,使用Spring Boot与企业软件系统进行交互.我的系统依赖于该企业系统中的一些jar和*.ini文件,因此我无法在Maven中打包所有依赖项.我希望能够将Spring Boot作为带有嵌入式Tomcat的可执行jar运行.我还希望能够通过命令行设置类路径.所以类似于:
java -classpath /home/sleeper/thirdparty/lib -jar MyApp.jar
Run Code Online (Sandbox Code Playgroud)
但是,-classpath和-jar不能共存.我试过"-Dloader.path".它能够加载文件夹下的所有jar文件,但不能加载其他内容,例如文件夹中的*.ini文件.
那么有没有办法让-classpath与带有嵌入式Tomcat的Spring可执行jar一起工作?
提前感谢您的帮助.
我正在尝试设置jar清单,以便将所有库(jar)加载到jar旁边的文件夹中.
清单看起来像这样:
Manifest-Version: 1.0
Class-Path: libs/
Main-Class: path.to.my.class.Main
Run Code Online (Sandbox Code Playgroud)
布局如下:
- MyJar.jar
- libs/
-----lib1.jar
-----lib2.jar
Run Code Online (Sandbox Code Playgroud)
而我正试图这样运行:
java -jar MyJar.jar
Run Code Online (Sandbox Code Playgroud)
并且我在文件夹中的jar中获取有关类的NoClassDefinition错误.
如果有人好奇,该文件夹可能包含在类加载期间处理的可选jar.那个'swhy我不能使用硬编码或自动生成的.
任何的想法?
更新重新 提出问题,因为目前无法从清单本身进行此操作.答案是唯一真正可行的,不需要提取罐子,虽然它也有效.
因此,总结答案是否定的,如果您有未指定的依赖项,则无法单独使用清单文件.
我正在尝试制作一个Spring Boot应用程序.一旦我使用其中包含的所有内容部署到胖jar文件,一切都很好.但是,我真正想要的是配置文件位于外部.例如,我有以下目录结构:
bin - contains startup and shutdown scripts
conf - all configurations. i.e. application.properties, logback.xml i18n.properties
logs - log files
libs - app.jar
Run Code Online (Sandbox Code Playgroud)
如果我使用这个目录结构并使用执行jar
java -cp ./conf -jar ../libs/app.jar
Run Code Online (Sandbox Code Playgroud)
然后不加载或识别conf目录中的属性.有没有更好的方法来维护上面的目录结构?或者,什么是替代/最佳实践?
这是我用 Scala 编写的代码。
object Main extends App {
println("Hello World from Scala!")
}
Run Code Online (Sandbox Code Playgroud)
这是我的build.sbt。
name := "hello-world"
version := "1.0"
scalaVersion := "2.11.5"
mainClass := Some("Main")
Run Code Online (Sandbox Code Playgroud)
这是我运行以创建 jar 文件的命令。
sbt package
Run Code Online (Sandbox Code Playgroud)
我的问题是在target/scala-2.11创建了一个名为hello-world_2.11-1.0.jar的 jar 文件。但我无法运行该文件。它给了我一个错误,说NoClassDefFoundError。
我究竟做错了什么?
jar ×4
java ×4
spring ×3
spring-boot ×3
build ×2
classpath ×2
dependencies ×1
deployment ×1
manifest ×1
maven-2 ×1
sbt ×1
scala ×1
spring-mvc ×1