2012-02-14 4 views
2

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

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

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

2, Как исправить неправильную область действия артефакта?

У меня проект ВОЙНЫ зависит от артефактов axis2-ядра, который в зависимости от сервлета-API-2.3 с областью «» компиляции (ошибка «при условии»), так что mvn install пакета сервлета-API- 2.3.jar в файл войны и вызывает «validateJarFile (...) - jar не загружен». Ошибка в Tomcat 7.

+1

В интересах будущего использования, пожалуйста, придерживайтесь один вопрос на пост .. Ваш первый вопрос уже был дан ответ здесь: http://stackoverflow.com/questions/4919256/add-compiled-java-class -to-a-maven-project/5563614 # 5563614 – Tim

ответ

1

Чтобы ответить на ваш второй вопрос: вы можете исключить транзитивные зависимости, используя < исключение> тег: 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> 
2

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

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

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>servlet-api</artifactId> 
    <scope>provided</scope> 
</dependency> 
+0

Добавление сервлета-api с предоставленной областью может быть лучшим вариантом здесь. Что касается использования Nexus/JFrog: это лучшие варианты, чем ответ, с которым я связан, но OP только начинается. Давайте познакомим его с Maven постепенно, чтобы предотвратить часто цитируемую кривую обучения кирпичной стене.;) – Tim

+0

нет другого выхода, кроме небольшого шока :) но для начала: вы можете разместить хранилище maven как общий сетевой диск и ссылайтесь на него через файл: ///, что было бы быстрым и грязным, и все-таки позволить кому-либо выполнить сборку без локальной установки артефактов. – wemu

0
  1. Есть много различных решений, как добавить недостающую зависимость. Например, вы можете использовать область system и указать путь (вы можете поместить JAR в проект и использовать путь относительно ${basedir}).

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

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

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

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

Смежные вопросы