2011-07-30 44 views
5

我的jar没有运行,我可以告诉它尝试运行,因为log4j文件管理创建日志文件夹,但没有任何反应,并且日志空白。Maven可执行文件库与外部路径的库

我的问题是我有一个文件夹,名为bin中的jar文件,名为LIB

文件夹中的图书馆,我triying这样的:

<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 

SOLUTION

原来的META-INF文件不正确。其原因是,Maven的存档,插件重命名快照库与时间戳默认行为

来覆盖利用这一点,通过Maven的归档文档的指示:

<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

+0

您的MANIFEST文件的外观如何?还有,你真的把依赖jar放在lib文件夹中? – Raghuram

+0

一切都在那里,MANIFEST看起来不错,只是附加编辑现在 – javaNoober

+0

你是正确的META-INF问题,我的最后一个库是lablib-checkboxtree-3.3-SNAPSHOT.jar,试图在控制台上运行jar,它可以找不到图书馆。我尝试删除并重新下载lib,但它一直放置thtat数字而不是单词SNAPSHOT,为什么? – javaNoober

回答

3

以上所有内容似乎都行。以下是你可能会想尝试/确认/回答一些事情/问题:

  • 你在命令行中运行这个?即使用java -jar <your.jar>还是正在开始通过双击该文件等?如果没有,请尝试从命令行运行它以查看会发生什么
  • 尝试使用mvn exec:java来查看是否会定期启动您的应用程序(maven-)。如果您不熟悉exec插件,请参阅http://mojo.codehaus.org/exec-maven-plugin/usage.html
  • 您是否可以使用常规Java System.out.println而不是日志记录来确认它是否实际启动?有一个零大小的日志可能是一个日志记录配置问题
  • 我看到你有一些上面的DB库。你可以在基本的初始化过程中添加一些println(或者更好的日志记录,但只有在你确认你的日志记录实际工作后),才能确认你不仅仅停留在那里(假设发生了什么 - 你没有提到任何异常或其他问题具体)

很多取决于实际的应用程序代码,但希望以上某些可能帮助您查明问题。

作为一个方面说明,你的主类真的是com.Main?如果是,我是否可以建议将其改为更适合的方式 - 例如com.yourdomain.yourapp.Main或沿着这些线。不是说这会改变上述结果,只是一种文体评论。

+0

我是双击它,因此我没有看到任何错误,现在我使用控制台,我看到它无法加载最后一个库,名称应该是lablib-checkboxtree-3.3-SNAPSHOT,但是maven正在改变它对于lablib-checkboxtree-3.3-20110114.141734-3,我手动更改了lib名称并确认它可行,如何解决此问题? – javaNoober

+0

,不要担心名称不com.Main;) – javaNoober

+0

你可以尝试从你的'.m2'文件夹中删除工件(如果你不熟悉,请参阅这个:http://stackoverflow.com/questions/6081617/ missing-maven-m2-folder),然后再次尝试'mvn package'?您应该在.m2/repository/ /lablib-checkboxtree/3.3-SNAPSHOT中找到它 - 只需将该文件夹移动到其他位置(作为备份解决方案),然后重新安装它,但是您之前做过(使用'mvn install:install-文件“还是你有像Nexus这样的网站?)。你应该确认你已经有lablib-checkboxtree-3.3-SNAPSHOT.jar –