2015-10-22 3 views
6

У меня есть проект под названием Родитель. Его тип - POM. Существует библиотека (ojdbc6.jar), который не доступен в общедоступном хранилище, поэтому я к нему доступ через <SystemPath>, как вы можете видеть ниже pom.xml:Не удается получить доступ к родительской библиотеке проекта (jar) в дочернем модуле - Maven

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.Parent</groupId> 
    <artifactId>Parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
     <module>childModule</module> 
    </modules> 

    <dependencies> 
     <dependency> 
      <groupId>com.oracle</groupId> 
      <artifactId>ojdbc</artifactId> 
      <version>6</version> 
      <scope>system</scope> 
      <systemPath>${basedir}/lib/ojdbc6.jar</systemPath> 
     </dependency> 
    </dependencies> 

    <repositories> 
     <repository> 
      <id>in-project</id> 
      <name>In Project Repo</name> 
      <url>file://${basedir}/lib</url> 
     </repository> 
    </repositories> 

Теперь имена ребенка проекта являются детей Module1 и детей Module2 использование этого (ojdbc6.jar) библиотека это POM упоминается ниже:

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <artifactId>testApp</artifactId> 
    <version>1.14.5.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <name>APP1</name> 
    <description>Application</description> 

    <parent> 
     <groupId>com.Parent</groupId> 
     <artifactId>Parent</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 
</project> 

Когда я строю с помощью Maven, это дает мне ошибку:

Почему это похоже на локальный репозиторий? Это происходит только тогда, когда родительский проект содержит библиотеку (jar), которая содержит системный путь. Этого не происходит, когда библиотека путей доступа (jar) в том же проекте, как и родительская ссылка ojdbc6.jar, там хорошо.

+0

Где находится баночка относительно детей? Свойство basedir отличается от родительского и дочернего. –

+0

Jar находится в папке lib относительно родительского проекта и maven передает баны зависимостей его модулю. Я предполагаю, что maven преобразует относительно абсолютного пути, когда он включает в себя байт зависимости от дочернего модуля. –

ответ

4

Я решил проблему путем обновления SystemPath в родительском pom.xml, как показано ниже:

<systemPath>${main.basedir}/lib/ojdbc6.jar</systemPath> 

, а затем добавить свойство main.basedir в родительских pom.xml и хранилище

<properties> 
     <main.basedir>${project.basedir}</main.basedir> 
    </properties> 
<repositories> 
     <repository> 
      <id>in-project</id> 
      <name>In Project Repo</name> 
      <url>file://${main.basedir}/lib</url> 
     </repository> 
</repositories> 

, а затем добавление элементов свойств и репозиториев в дочернем модуле («/ ..» добавляется, когда папка дочернего модуля находится в родительской папке, поэтому перейдите в один каталог, а затем установите абсолютный путь в родительскую папку lib, как ожидается):

<properties> 
     <main.basedir>${project.basedir}/..</main.basedir> 
    </properties> 
<repositories> 
      <repository> 
       <id>in-project</id> 
       <name>In Project Repo</name> 
       <url>file://${main.basedir}/lib</url> 
      </repository> 
    </repositories> 
+0

[Этот ответ] (http://stackoverflow.com/questions/1012402/maven2-property-that-indicates-the -parent-directory) помогите мне разобраться в проблеме, но ее ответ не решил мою проблему, поэтому я сделал некоторые исследования и разработки и придумал решение, упомянутое выше. –

0

От: https://stackoverflow.com/a/2230464/1490322

Finally, declare it like any other dependency (but without the system scope):

<dependency> 
    <groupId>your.group.id</groupId> 
    <artifactId>3rdparty</artifactId> 
    <version>X.Y.Z</version> 
</dependency> 
+0

Ответ, о котором вы упомянули, имеет недостаток, я задаюсь вопросом, почему люди его ценят. Когда вы передаете проект любому репозиторию SVN, чтобы другие разработчики могли получать и получать доступ к проекту и т. Д. Им нужно запустить команду svn install bla bla .. (чтобы совершить там локальное репо), и если есть много не-глобальных репо, то это трудоемкая задача. –

+0

Это не работает с многомодульными сборками, и вопрос OP уже подразумевает некоторое понимание этой стратегии. –

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