Правильный способ использования Maven - PullRequest
2 голосов
/ 14 февраля 2012

Я новичок в Maven, у меня здесь 2 проблемы:

1, как решить проблему с отсутствующим артефактом?

Мне нужен jcharts-0.7.5, но он недоступен в Центральном репозитории Maven. У меня есть файл jar, но, кажется, нелегко поместить его в проект maven.

2, как исправить неверную область зависимости артефакта?

У меня WAR-проект зависит от артефакта axis2-kernel, который зависит от servlet-api-2.3 с областью «compile» (ошибка «обеспечивает»), поэтому mvn install пакетирует servlet-api-2.3 .jar в файл war и вызывает «validateJarFile (...) - jar не загружен». ошибка в Tomcat 7.

Ответы [ 3 ]

2 голосов
/ 14 февраля 2012

Номер один: используйте репозиторий maven. Это может быть простой HTTP-сайт Apache со статическим контентом. Но я бы рекомендовал использовать Sonatype Nexus или JFrog Artifactory для хранения артефактов, не найденных где-либо еще. Вы можете найти их в репозитории JBoss или IBiblio (оба довольно большие)

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

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <scope>provided</scope>
</dependency>
1 голос
/ 14 февраля 2012

Чтобы ответить на ваш второй вопрос: вы можете исключить переходные зависимости, используя тег : http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>org.apache.axis2</groupId>
      <artifactId>axis2-kernel</artifactId>
      <version>...</version>
      <exclusions>
        <exclusion><!-- declare the exclusion here -->
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
        </exclusion>
      </exclusions> 
    </dependency>
  </dependencies>
</project>
0 голосов
/ 14 февраля 2012
  1. Существует множество различных решений, как добавлять недостающие зависимости. Например, вы можете использовать область действия system и указать путь (вы можете поместить JAR в проект и использовать путь относительно ${basedir}).

    Но гораздо лучшим решением является установка сервера, подобного Nexus или Artifactory , потому что они позволяют вам создавать свои собственные репозитории, и они все еще работают в случае сбоя Интернета (например, когда какой-то идиот сломает ваш роутер, или у вашего провайдера возникнут какие-то проблемы, или кто-то пропустит 18-дюймовую стальную балку с двойным Т через несколько волокон).

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

  2. Вы можете просто повторить зависимость в вашем POM с другой областью действия (ваше POM всегда выигрывает), или вы можете использовать элемент dependencyManagement .

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

...