我的Java应用程序有一个类似于这样的包结构:
src/com/name/app
src/com/name/app/do
src/com/name/utils/db
Run Code Online (Sandbox Code Playgroud)
我如何将这些目录中的Java文件编译到可运行的jar中?我需要将所需的库打包到生成的JAR(jdbc)中.
我总是在Eclipse中完成这些工作,但现在我需要为几个人提供一种编译存储库而不使用eclipse的方法,我正在考虑制作一个makefile或一个调用必要的javac模式的脚本.
exec jar可能是一个非常常见的问题.我正在尝试创建并运行一个可执行jar,它让我疯狂.
我有几个类(包stmts),其中一个有一个main方法,一个简单的空构造函数和几个biz方法,这些构成了一个小eclipse项目的一部分.
我使用build.xml将这些和清单文件捆绑到jar(arc.jar)中.我的程序使用jdom库以及我的其他一个eclipse项目的引用,所以我在构建我的arc.jar时包括了jdom libray和其他商业库.
这是我写的Manifest.MF,有一个新的后续Main-Class
Manifest-Version: 1.2
Class-Path: jdom.jar other.jar
Main-class: uk.co.Art
Run Code Online (Sandbox Code Playgroud)
当我解压缩这个arc.jar时,它包含jdom.jar,other.jar,META-INF/Manifest.mf以及包含我的类的包.有趣的是,jar中的Manifest文件看起来像这样 -
Manifest-Version: 1.2
Created-By: 14.2-b01 (Sun Microsystems Inc.)
Main-class: uk.co.Art
Class-Path: jdom.jar other.jar
Run Code Online (Sandbox Code Playgroud)
ClassNotFoundException: uk.co.Art当Main类的值没有包时,我得到了ClassNotFoundException .使用包时错误更改为ClassNotFoundException: org.jdom.JDOMException.
所以只是为了测试目的,我尝试c:\为我的执行类和jar 提供完整路径,但仍然无法找到主类,错误输出ClassNotFoundException: uk.co.Art.
我似乎无法理解为什么.
我使用的命令行是 - java -jar Arc.jar
cmd提示符下的版本是 -
而eclipse安装的jre是jre6
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode)
你们有什么人建议的?
Alex的解决方案确实解决了本地执行的问题.
我还想到另一种方式(作为一个额外的选项)执行,在服务器上部署Arc.jar并在该机器上运行批处理,基本上设置java类路径,然后调用jar或直接调用类,无论它是哪种方式作品.But its only an option, not a preferred one though. …
是否有可能从同一个罐子中启动两个不同的应用程序?我编写了简单的客户端服务器,客户端和服务器部分都在一个JAR中.他们使用一些常见的类.
我明白,我可以为客户端和服务器创建单独的jar,并将常用的类和资源放入第三个jar中.这实际上是做事的"正确"方式.但我的任务很简单,课程很小,我只是不想制作三个罐而不是一个.
java -jar需要清单中的Main-Class.似乎没有-jar开关我也无法工作.
顺便说一下,客户端和服务器应该能够并行运行.
我有一个我一直在研究的Java程序.我想向我的女朋友展示一下,她不知道如何使用Java,并让她很容易这样做.我理解第一步是从命令行将其编译为.class,但之后我无能为力.
我有兴趣找出如何做到这一点既适用于Windows和Mac OS(我在Mac上,跟我女朋友一起,但我的学校使用Windows计算机).
我一直在甲骨文看到他们的演示,他们下载为.jnlp,是朝着正确方向迈出的一步吗?
具体来说,我正在寻找一种简单的下载和启动的"文件",没有涉及终端(可能是一个带有命令行的文件?).
我使用以下命令运行jetty服务器,服务器启动,并在命令提示符中显示与服务器启动相关的消息:
java -jar start.jar
Run Code Online (Sandbox Code Playgroud)
我想要的是:
我想在后台启动jetty服务器,即服务器应该启动,并且在命令提示符中不应显示任何消息.因此我尝试了这些命令:
start /MIN java -jar start.jar
start /B java -jar start.jar
Run Code Online (Sandbox Code Playgroud)
这个命令的缺点:
我能够启动服务器,但java.exe窗口打开显示所有服务器启动消息 - 我不希望也显示java.exe窗口.
请让我知道如何以这样的方式启动服务器:
1)服务器在后台启动
2)不显示java.exe窗口
谢谢.
我解压缩一个 jar 文件,添加一个filex然后filex使用以下命令将其压缩:
jar cf jarfile input-files filex META-INF
Run Code Online (Sandbox Code Playgroud)
我发现在jar用这个新文件打包后,新文件MANIFEST是默认的,基本上是空的:
Manifest-Version: 1.0
Created-By: 1.8.0_40 (Sun Microsystems Inc.)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个标志来指定MANIFEST再次打包 jar 的时间。
java程序或jar的运行时版本和编译时版本两者中的哪一个应该大于或等于另一个?编辑:JRE 系统库的版本应该是什么?
我有看起来像这样的文件夹:
foo/
Bar.java
Bar.class
Foo.java
Foo.class
manifest.mf
Run Code Online (Sandbox Code Playgroud)
.java 文件都在一个名为 x 的包中:
package x;
Run Code Online (Sandbox Code Playgroud)
我生成 .class 文件:
javac foo/*.java
Run Code Online (Sandbox Code Playgroud)
然后我尝试打包为可运行的 jar 格式:
jar cmf foo.jar foo/manifest.mf foo/*.class
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
java.io.IOException: line too long
at java.base/java.util.jar.Attributes.read(Attributes.java:381)
at java.base/java.util.jar.Manifest.read(Manifest.java:228)
at java.base/java.util.jar.Manifest.<init>(Manifest.java:80)
at java.base/java.util.jar.Manifest.<init>(Manifest.java:72)
at jdk.jartool/sun.tools.jar.Main.run(Main.java:264)
at jdk.jartool/sun.tools.jar.Main.main(Main.java:1669)
Run Code Online (Sandbox Code Playgroud)
manifest.mf 的内容只是:
Main-Class: x.Bar
Run Code Online (Sandbox Code Playgroud)
它编译时javac不确定发生了什么,或者为什么它不喜欢清单文件,有人知道吗?
我可以成功地使用Gradle编译胖 JAR,但是在最近从“编译”依赖项规范切换到“实现/api”规范后运行 JAR 时遇到问题。我已经确定问题仅发生在以下两种情况之一。应用程序在 IntelliJ 中的任一情况下运行。
第一/问题:
dependencies {implementation 'no.tornado:tornadofx:1.7.18'}
Run Code Online (Sandbox Code Playgroud)
第二/作品:
dependencies {compile'no.tornado:tornadofx:1.7.18'}
Run Code Online (Sandbox Code Playgroud)
JAR 在这两种情况下都会编译。当我尝试在命令行上启动第一个案例 JAR 时出现问题,并引发以下错误。
C:\aaa_eric\code\testr\mic\build\libs>java -jar mic-1.0-snapshot.jar 错误:无法找到或加载主类 app.MyApp 引起:java.lang.NoClassDefFoundError:tornadofx/App
这是 build.gradle 中的 JAR 任务。tornadofx 依赖项是否可能在编译时可用,但在运行时不可用?谢谢你的帮助。
jar {
manifest {
attributes 'Main-Class': 'app.MyApp'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
Run Code Online (Sandbox Code Playgroud) 我想将 spring-boot 可执行 jar 文件部署到 Amazon EC2 实例中。我使用 pem 文件成功登录到实例,但无法将我的 Jar 从本地系统位置复制到 ec2。我使用的命令是
scp -i /Users/sandeepamarnath/Desktop/AWS/recovery-key.pem /Users/sandeepamarnath/Desktop/AWS/foodapp-0.0.1-SNAPSHOT.jar ec2-user@ec2-15-222-1-81.ca-central-1.compute.amazonaws.com:~
Run Code Online (Sandbox Code Playgroud)
我收到一个拒绝许可的错误,如下所示:
警告:身份文件 /Users/sandeepamarnath/Desktop/AWS/recovery-key.pem 不可访问:没有这样的文件或目录。权限被拒绝(公钥)。
失去了连接
错误截图
executable-jar ×10
java ×8
jar ×5
amazon-ec2 ×1
build.gradle ×1
classpath ×1
deployment ×1
installer ×1
javac ×1
jetty ×1
macos ×1
makefile ×1
manifest ×1
packages ×1
runnable-jar ×1
windows ×1