Maven исполняемый файл с библиотеками по внешнему пути - PullRequest
5 голосов
/ 30 июля 2011

Мой 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 doc:

<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 в своих проектах

1 Ответ

3 голосов
/ 30 июля 2011

Выше всего кажется, что все в порядке.Вот некоторые вещи / вопросы, которые вы можете попробовать / подтвердить / ответить:

  • Вы запускаете это из командной строки?Т.е. используя java -jar <your.jar> или вы запускаете его, например, двойным щелчком по файлу и т. Д.?Если нет, попробуйте запустить его из командной строки, чтобы увидеть, что происходит
  • Попробуйте использовать mvn exec:java, чтобы проверить, регулярно ли запускается ваше приложение (maven-).См. http://mojo.codehaus.org/exec-maven-plugin/usage.html, если вы не знакомы с плагином exec
  • Можете ли вы использовать обычную Java System.out.println вместо регистрации, чтобы подтвердить, что она действительно запускается?Наличие журнала нулевого размера может быть проблемой конфигурации журналирования
  • Я вижу, у вас есть некоторые библиотеки БД выше.Можете ли вы поместить некоторые println (или лучше в журналирование, но только после того, как вы подтвердите, что ваше журналирование действительно работает) операторы для базовой инициализации, чтобы подтвердить, что вы не просто застопорились там (при условии, что это происходит - вы не упоминаете никаких исключений или других проблем)в частности)

Многое зависит от самого кода приложения, но надеюсь, что некоторые из вышеперечисленных могут помочь вам точно определить проблему.

В качестве примечания, действительно ли ваш основной классcom.Main?Если да, могу я предложить изменить это на что-то более подходящее - например, com.yourdomain.yourapp.Main или что-то в этом роде.Не то чтобы это изменило приведенный выше результат, просто стилистический комментарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...