我想将我的项目打包在一个可执行的JAR中进行分发.
如何将所有依赖JAR的Maven项目打包到我的输出JAR中?
我正在尝试使用maven为一个名为"logmanager"的小型家庭项目生成一个可执行jar,就像这样:
我将那里显示的代码段添加到pom.xml中,然后运行mvn assembly:assembly.它在logmanager/target中生成两个jar文件:logmanager-0.1.0.jar和logmanager-0.1.0-jar-with-dependencies.jar.当我双击第一个jar时出现错误:
Could not find the main class: com.gorkwobble.logmanager.LogManager. Program will exit.
Run Code Online (Sandbox Code Playgroud)
当我双击jar-with-dependencies.jar时出现稍微不同的错误:
Failed to load Main-Class manifest attribute from: C:\EclipseProjects\logmanager\target\logmanager-0.1.0-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)
我复制并粘贴了路径和类名,并检查了POM中的拼写.我的主要类从eclipse启动配置启动.有人可以帮我弄清楚为什么我的jar文件不会运行?另外,为什么有两个罐开始?如果您需要更多信息,请与我们联系.
这是完整的pom.xml,供参考:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gorkwobble</groupId>
<artifactId>logmanager</artifactId>
<name>LogManager</name>
<version>0.1.0</version>
<description>Systematically renames specified log files on a scheduled basis. Designed to help manage MUSHClient logging and prevent long, continuous log files.</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<!-- nothing here -->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.gorkwobble.logmanager.LogManager</mainClass> …Run Code Online (Sandbox Code Playgroud) 我得到了错误Unable to locate NamespaceHandler when using context:annotation-config运行(java -jar)一个由maven-assembly-plugin组装并包含我的项目及其所有依赖项的jar.
正如其他人在forum.springsource.org 线程(消息#7/8)上正确发现的那样,问题出现是因为文件META-INF/spring.handlers和META-INF/spring.schemas存在于不同的jar中,当maven-assembly-plugin在单个文件中重新打包jar时会被覆盖.
查看两个spring - *.jar文件的内容,您可以看到文件位于相对于类路径的相同位置
$ jar tf spring-oxm-3.0.3.RELEASE.jar
META-INF/spring.handlers
META-INF/spring.schemas
org/springframework/oxm/GenericMarshaller.class
...
$ jar tf spring-context-3.0.3.RELEASE.jar
META-INF/spring.handlers
META-INF/spring.schemas
org/springframework/context/ApplicationContext.class
Run Code Online (Sandbox Code Playgroud)
是不是可以将META-INF文件夹放在特定的包中?如果是这样,我建议的想法(希望它是适用的)是将META-INF/spring.shemas和META-INF/spring.handlers文件放在他们引用的包下面.
$ jar tf spring-oxm-3.0.3.RELEASE.jar
org/springframework/oxm/META-INF/spring.schemas
org/springframework/oxm/META-INF/spring.handlers
org/springframework/oxm/GenericMarshaller.class
...
$ jar tf spring-context-3.0.3.RELEASE.jar
org/springframework/context/META-INF/spring.handlers
org/springframework/context/META-INF/spring.schemas
org/springframework/context/ApplicationContext.class
Run Code Online (Sandbox Code Playgroud)
这样,在单个jar中合并时它们不会发生冲突.你怎么看待这件事?
我正在尝试创建一个包含项目类的可执行jar(使用maven),它是一个清单文件的依赖项,该文件包含主类的条目和指向jar根目录中包含的依赖项的类路径条目;像这样:
清单文件:
..... Main-Class : com.acme.MainClass Class-Path : dependecy1.jar dependecy2.jar .....
罐:
jar-root |-- .... |-- com/acme/../*.class |-- dependecy1.jar `-- dependecy2.jar
我正在使用maven-jar-plugin来创建清单文件和maven-shade-plugin来创建"uber"jar,但依赖项被解压缩并作为类添加到我的jar中.
我有一个我用Maven制作的项目.我使用"mvn package"编译了一个JAR,现在我想运行它,最好不要设置一些疯狂的类路径,因为它依赖于Spring和一半的互联网或其他东西.有什么办法可以轻松运行吗?像"mvn run"之类的东西会很棒,或者是将所有依赖项都放入jar中的选项,所以我可以做"java -jar"也很精彩.
你是如何处理这个的,你建议做什么?因为基于〜/ .m2导出CLASSPATH可能只是伤害;-)
我有一个我用eclipse编写的java应用程序.它在那里工作正常.
它可以从我导出它的目录中的命令行运行.在该目录中是另一个目录,其中包含应用程序所需的两个jar文件,清单文件具有指定它们的Class-path选项.
我想要一种方法来使用eclipse生成必要的文件来打包这个应用程序以在另一台机器上运行.那可能吗?
如果我选择"创建可执行jar文件",它会创建这个巨大的文件; 它解压缩并重新打包两个库,我知道这是一种获取其功能的方法.如果他们以某种方式留下自己的罐子,我会更喜欢它,但我不确定eclipse能做到这一点.令人讨厌的是,可执行jar文件选项将我的eclipse项目中的大量文件放入该jar文件中.我没有看到选择包含在那里的内容的选项,虽然我确实看到了在项目属性中输入包含和排除"规则"的地方.这些适用于这里吗?我还有其他地方选择做什么和做什么没有被包含在"可执行jar"中?
如果我选择"创建jar"("创建可执行jar"的内容),我看不到哪里可以选择将这两个jar文件包含在任何地方.也许没有地方可以将它们包含在可以使用的地方.
如果可能的话,我不想使用Ant,我不想使用Maven,我不想下载其他工具.在我看来,Eclipse已经拥有所有这些信息,我怀疑它已经可以做到这一点,而无需去学习另一个"漂亮"的工具.
我创建了一个jar文件usign maven2 build.我试图使用命令运行该jar文件:
java -jar sample.jar com.app.Test
Run Code Online (Sandbox Code Playgroud)
Test是具有主要方法的类.但我得到这个例外:
Exception in thread "main" java.lang.NullPointerException
at sun.launcher.LauncherHelper.getMainClassFromJar(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我解决这个异常并运行jar文件吗?
提前致谢.