【发布时间】:2011-07-30 01:48:06
【问题描述】:
我的 jar 没有运行,我可以告诉它尝试运行,因为 log4j 文件设法创建日志文件夹,但是没有任何反应并且日志为空白。
我的问题是我的 jar 文件位于名为 bin 的文件夹中,而库位于名为 lib 的文件夹中
我正在尝试这个:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<outputDirectory>${staging.dir}/bin</outputDirectory>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
<mainClass>com.Main</mainClass>
<classpathPrefix>../lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
和
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${staging.dir}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
我也尝试过使用 maven-assembly-plugin,但它将所有东西都打包在 jar 中,我真的需要文件夹 bin 和 lib
我需要进行哪些设置才能使其正常工作?
编辑:META-INF 文件
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: me
Build-Jdk: 1.6.0_26
Main-Class: com.Main
Class-Path: ../lib/ojdbc6-11.2.0.jar ../lib/sqljdbc4-4.2.0.jar ../lib/
mysql-connector-java-5.1.17.jar ../lib/hibernate-core-3.6.5.Final.jar
../lib/antlr-2.7.6.jar ../lib/commons-collections-3.1.jar ../lib/dom
4j-1.6.1.jar ../lib/hibernate-commons-annotations-3.2.0.Final.jar ../
lib/hibernate-jpa-2.0-api-1.0.0.Final.jar ../lib/jta-1.1.jar ../lib/s
lf4j-api-1.6.1.jar ../lib/hibernate-entitymanager-3.6.5.Final.jar ../
lib/cglib-2.2.jar ../lib/asm-3.1.jar ../lib/javassist-3.12.0.GA.jar .
./lib/slf4j-log4j12-1.6.1.jar ../lib/log4j-1.2.16.jar ../lib/commons-
codec-1.5.jar ../lib/lablib-checkboxtree-3.3-20110114.141734-3.jar
解决方案
原来 META-INF 文件不正确。原因是 maven-archiver-plugin 将带有时间戳的 SNAPSHOT 库重命名为默认行为
按照 Maven Archiver 文档的说明覆盖使用此功能:
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
<useUniqueVersions>false</useUniqueVersions>
<mainClass>com.Main</mainClass>
<classpathPrefix>../lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
除此之外,我希望人们在开始时发现 maven 代码很有用,因为它确实有效,只是要注意项目中的 SNAPSHOTS
【问题讨论】:
-
您的清单文件看起来如何?您实际上是否将依赖的 jar 放在 lib 文件夹中?
-
一切都在那里,清单看起来不错,现在只是附加到编辑
-
你说得对,是 META-INF 问题,我的最后一个库是 lablib-checkboxtree-3.3-SNAPSHOT.jar,尝试在控制台上运行 jar,但找不到库。我尝试删除并重新下载该库,但它一直放置 thtat numebr 而不是单词 SNAPSHOT,为什么?
-
是的,“useUniqueVersions”是解决你命名的“时间戳”问题的方法,我遇到了类似的问题。