使用Eclipse将项目导出为Runnable JAR文件时,有三种选择:
1. Extract required libraries into generated JAR
2. Package required libraries into generated JAR
3. Copy required libraries into a sub-folder next to the generated JAR
Run Code Online (Sandbox Code Playgroud)
但是,似乎只能从Runnable JAR File Export窗口中选择三个选项中的一个.我想知道是否有一些方法可以混淆这些方法,例如,在打包其余文件的同时提取一些文件?
注意:我需要这个,因为我的一个JAR文件包含大量对其他文件的引用,所以1不能是一个选项,我担心2可能会给我带来一些问题.
谢谢!
我正在尝试将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"
如果我对错误或我应该采取的其他步骤有所了解,我将不胜感激. …
我有这门课:
public class Test {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud)
我使用Eclipse的"Export to runnable JAR"函数将其转换为可执行的jar文件(test.jar).当我在Eclipse中运行这个程序时,它打印出"Hello World!",但是当我从命令行调用jar文件时,没有任何反应.
我试过像这样调用jar文件:
test.jar
test.jar -jar
Run Code Online (Sandbox Code Playgroud)
没有任何输出.
我有另一个程序也有副作用(除了输出到stdout),并且正在执行副作用(告诉我jar文件肯定已执行),同样没有给命令行输出.我也尝试过使用stderr,但这没什么区别.有谁知道我怎么做这个工作?
谢谢!
我通过运行以下命令将标准可执行jar文件安装为Windows服务:
> prunsrv.exe //IS//"My Service" --Install="C:\path-to-prunsrv.exe" --Jvm=auto \
--Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \
--StartClass=com.mydomain.MyService
Run Code Online (Sandbox Code Playgroud)
我现在可以通过运行以下命令(我正在使用Java 1.6)在控制台模式下运行我的程序:
> prunsrv.exe //TS//"My Service"
Run Code Online (Sandbox Code Playgroud)
当我尝试通过标准Windows服务接口启动服务时,我收到以下错误消息:
本地计算机上的MyService服务已启动,然后停止.如果某些服务未被其他服务或程序使用,则会自动停止.
当我尝试以这种方式启动服务时,我的应用程序的日志文件中没有输出.Window的事件日志(Windows 7 64位)中也没有输出.我该怎么做才能找出为什么这项服务无法运行?
我所要做的就是将一个简单的java程序转换为macOSX .app文件,这样我就可以将它作为一个简单的可执行文件分发.
我到处都读过,每个人都说同样的话:
使用Jar Bundler - 所有教程似乎都已过时,但它不起作用.当我运行:java -jar jarbundler-2.0.0.jar
控制台返回"jarbundler-2.0.0.jar中没有主要清单属性"
如果我是对的,那么打包jar文件的人会失败吗?但我试过从其他网站和其他版本下载它,但我得到了相同的东西.
他们说你可以自己创建目录和文件,然后将你的文件夹重命名为.app,然后对它运行一个命令,但这很复杂,因为我不确切知道如何创建一个info.plist文件......如果你想这样做,我到目前为止找到的最好的网站就是这个:OSX的Java部署选项
我已将我的代码编译成.jar文件,我有一个图标和所有内容,我需要做的就是以某种方式将其打包到.app文件中.
我在这里先向您的帮助表示感谢!
编辑:我明白了!经过7或8个小时的搜索和阅读后,它可以工作.因为我是新手,所以我将发布我所学到的所有东西来拯救那些经历过同样问题的人.我放弃了自己做的方法,然后回到了JarBundler.如果其他人正在读这个并且他们对ANT一无所知,那就是我所做的:下载JarBundler,我从这里得到了我的:Mac OS X JarBundler ANT任务并按照其中的说明操作.
下载时,请将jarbundler-2.2.0.jar文件放在此处:
的/ usr /共享/蚂蚁/ lib中
您可能必须运行命令来移动它,例如:
sudo mv jarbundler-2.2.0.jar~ /../../ usr/share/ant/lib/jarbundler-2.2.0.jar
就像我说的那样,我还在学习,但这对我有用.
确保您移动合适jarbundler,这是我遇到了问题,我把整个文件夹,而不是内部.jar文件,所以一定要移动拉链你下载的是这样的文件夹内的.jar,而不是整个事情,否则当你去构建它时,你会得到一个错误,如错误:taskdef class net.sourceforge.jarbundler.JarBundler找不到.
然后你需要将你的代码编译成一个.jar文件(有两种类型,一种是像.zip,另一种是可执行文件)你想要一个普通的JAR文件,不是可执行的,所以要做到这一点你首先需要编译您的代码获取.class文件,然后打开命令提示符并按照此处的说明操作:创建一个Jar文件该命令将如下所示:
jar cf myName.jar*.class
获得jar文件后,需要在同一文件夹中创建.xml文件,并且需要将其命名为build.xml.使用文本编辑器编辑它.按照上面链接中的说明创建它.它看起来像这样:
//build.xml
<project name="MyProject">
<taskdef name="jarbundler"
classname="net.sourceforge.jarbundler.JarBundler" />
<target name="bundle">
<jarbundler dir="release"
name="Apollo's Image Editor"
mainclass="ImageEditorGUI"
jar="ApolloIE.jar"
icon="Aperture.icns" />
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
从那里(顺便说一下,我使用的是Macbook Pro)你所要做的就是从该文件夹运行一个命令行:
蚂蚁束
它应该在名为release的文件夹中创建一个.app文件.总结一下:你需要的只是同一个文件夹中的.jar文件和build.xml文件,然后运行命令:ant bundle(或者你在build.xml文件中命名为target的任何东西,我把它命名为bundle)
祝你好运,希望这有助于那里的任何人.
如果有人想知道,我拿了由JarBundler生成的Info.plist并将其放入我正在制作的目录中并且它有效!所以这就是问题,我只是不知道如何正确格式化......这里是:Info.plist
我有一个多模块项目,使用弹簧启动1.1.7构建
结构是
+ parent
+ import
+ web
+ backend
Run Code Online (Sandbox Code Playgroud)
我的父模块将包括一些微服务,我想从我父母管理的东西(所有使用的依赖项)等等.在导入/后端有我的批处理业务逻辑,在web中有一个mvc应用程序,从那里我可以开始批处理作业.
在Eclipse中,一切正常,我可以从Application.java文件和应用程序启动应用程序.
现在我想通过执行可执行jar文件来执行该应用程序,但是当我尝试从控制台启动时,我收到以下错误消息.
java -jar application.jar
Kein Hauptmanifestattribut in application.jar
Run Code Online (Sandbox Code Playgroud)
jar是非常小的只有5kb,我没有在jar包中找到任何3方依赖的罐子.
Web模块的Pom如下:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>at.company.bbsng</groupId>
<artifactId>bbsng-import</artifactId>
<version>0.1.0-SNAPSHOT</version>
</parent>
<artifactId>bbsng-import-web</artifactId>
<name>bbsng-import-web</name>
<packaging>jar</packaging>
<properties>
<start-class>at.company.bbsng.dataimport.Application</start-class>
</properties>
<dependencies>
<!-- APPLICATION -->
<dependency>
<groupId>at.company.bbsng</groupId>
<artifactId>bbsng-import-backend</artifactId>
<version>${parent.version}</version>
</dependency>
<!-- SPRING ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project> …Run Code Online (Sandbox Code Playgroud) 我创建了一个桌面应用程序,我遇到了生成的runnable jar问题.在Eclipse环境中一切正常,但是当我生成jar时,它只显示swt组件(菜单,选项卡等).其他库位置是一个空白区域(用于生成库的库).没有出现相同的内容set ToolBar(包含带图像的按钮),GoogleMap.html不会出现.
如何正确生成包含这些外部源的可执行jar?
ToolBar图片加载代码:
folderSearchIcon = new Image(display, this.getClass().getResourceAsStream("images/search_folder.png"));
Run Code Online (Sandbox Code Playgroud)
GoogleMap.html加载代码:
File mapFile = new File("resources/GoogleMap.html");
if(!mapFile.exists()) {
System.out.println("File doesn't exist! " + mapFile.getAbsolutePath());
return;
}
Run Code Online (Sandbox Code Playgroud)
生成可运行的jar:

我在Eclipse中的app结构和生成的jar结构:

生成的清单:
Manifest-Version: 1.0
Rsrc-Class-Path: ./ swt.jar commons-imaging-1.0-SNAPSHOT.jar org.eclip
se.nebula.widgets.gallery_0.5.3.201210262156.jar xmpcore.jar metadata
-extractor-2.6.3.jar
Class-Path: .
Rsrc-Main-Class: geotagger.AppInit
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Run Code Online (Sandbox Code Playgroud) 我正在尝试运行作为JAR打包的Scala应用程序(包括依赖项),但是在使用该-Xbootclasspath/p选项添加Scala库之前,这会失败.
调用失败:
java -jar /path/to/target/scala-2.10/application-assembly-1.0.jar
Run Code Online (Sandbox Code Playgroud)
在应用程序执行了一些预期输出后,控制台显示:
线程"main"中的异常scala.reflect.internal.MissingRequirementError:找不到编译器镜像中的对象scala.runtime.at scala.reflect.internal.MissingRequirementError $ .signal(MissingRequirementError.scala:16)at scala.reflect.internal.MissingRequirementError $ .notFound(MissingRequirementError.scala:17)at scala.reflect.internal.Mirrors $ RootsBase.getModuleOrClass(Mirrors .scala:48)scala.reflect.internal.Mirrors $ RootsBase.getModuleOrClass(Mirrors.scala:40)at scala.reflect.internal.Mirrors $ RootsBase.getModuleOrClass(Mirrors.scala:61)at scala.reflect.internal.镜像$ RootsBase.getPackage(Mirrors.scala:172)at scala.reflect.internal.Mirrors $ RootsBase.getRequiredPackage(Mirrors.scala:175)at scala.reflect.internal.Definitions $ DefinitionsClass.RuntimePackage $ lzycompute(Definitions.scala: 181)scala.reflect.internal.Definitions上的scala.reflect.internal.Definitions $ DefinitionsClass.RuntimePackage(Definitions.scala:181)scala.reflect.internal.Definitions $ DefinitionsClass.RuntimePackageClass $ lzycompute(Definitions.scala:182)at scala.reflect.internal.Definitions scala.reflect上的$ DefinitionsClass.RuntimePackageClass(Definitions.scala:182).在scala.reflect.internal.Definitions $ DefinitionsClass.AnnotationDefaultAttr(Definitions.scala:1014)的scala.reflect.internal.Definitions $ DefinitionsClass.syntheticCoreClasses $ lzycompute中的internal.Definitions $ DefinitionsClass.AnnotationDefaultAttr $ lzycompute(Definitions.scala:1015)定义.scala:1144)scala.reflect.internal.Definitions $ DefinitionsClass.syntheticCoreClasses(Definitions.scala:1143)scala.reflect.internal.Definitions $ DefinitionsClass.symbolsNotPresentInBytecode $ lzycompute(Definitions.scala:1187)at scala.reflect .internal.Definitions $ DefinitionsClass.symbolsNotPresentInBytecode(Definitions.scala:1187)at scala.reflect.internal.Definitions $ DefinitionsClass.init(Definitions.scala:1252)at scala.tools.nsc.Global $ Run.(Global.scala: 1290)在extract.ScalaExtractor $ Compiler $ 2 $.(ScalaExtractor.scala:24)
工作调用:
java -Xbootclasspath/p:/path/to/home/.sbt/boot/scala-2.10.2/lib/scala-library.jar -jar …Run Code Online (Sandbox Code Playgroud) 我希望能够通过可执行JAR进行分发,而无需让用户升级到最新版本的JRE.如何将JRE打包到JAR中,以便它们可以在系统上没有安装JRE的情况下运行jar?
我有一个Java应用程序并创建了一个JAR文件并进行了部署.
该应用程序使用外部JAR,如Log4J JAR.创建JAR文件时,如何将所有外部相关JAR包含到我的存档中?
为了让我的应用程序正常工作,我不得不将Log4J JAR复制到与我自己的JAR相同的目录中,这有点违背了jar的目的.部署一个JAR文件不是更优雅吗?