2015-01-04 4 views
4

Я совершенно новый в Maven.
Я пытаюсь сделать следующее:
Предположим, что мы имеем к проектам А и В. Проект B должен использовать некоторые classfrom_A из кувшина, импортированных из Здесь приведены определения: pom.xml проекта А:Maven: Использование класса из импортированной банки

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>A_Group</groupId> 
    <artifactId>A_Artifact</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 
    <name>A_Project</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
</project> 

Здесь pom.xml проекта B (зависит от А):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>B_Group</groupId> 
    <artifactId>B_Artifact</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 
    <name>B_Project</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>A_Group</groupId> 
      <artifactId>A_Artifact</artifactId> 
      <version>1.0</version> 
      <scope>compile</scope> 
     </dependency> 
    </dependencies> 
</project> 

Вот фрагмент кода из проекта B:

import packageFromA.*; 
public class App { 
    public static void main(String[] args) { 
    classFromA ca = new ClassFromA; //from packageFromA 
    ca.someFunction();    
    } 
} 

Я бегу МВН установки для А, то для B без ошибок Но при попытке запустить код выше от IntelliJ Idea, получил ошибку: Ошибка: (3, 18) Java: пакет packageFromA не существует

Как я понимаю из maven docs: «зависимости от компиляции доступны во всех классах, и они упакованы». Но кажется, что импортный класс все еще не был разрешен. Чего не хватает в определениях? Заранее спасибо

UPDATE: при запуске из IntelliJ проблема была решена после повторного импорта. Но когда я бегу из командной строки
java projectB
Нужно ли явно задавать путь к классам импортированных банок? Если да, то мне нужно указать на местоположение i в локальном репозитории maven (.m2/repository)? Благодаря

+0

'pom.xml' похоже, хорошо, это скорее проблема IDE. Вы проверили сгенерированные 'jar'? – meskobalazs

+0

Спасибо за ответ. Сгенерированная банка для проекта A содержит файл classFromA.class. Должна ли mvn устанавливать путь класса обновления? –

+0

Но содержит ли проект B файл проекта 'jar'? Если это так, то это проблема IDE. – meskobalazs

ответ

2

В вашем POM для проекта B вы можете добавить конфигурацию для Maven-баночка-плагина для создания файла манифеста, который содержит путь к классам:

<project> 
    ... 
    <build> 
    <plugins> 
     ... 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 
     ... 
    </plugins> 
    </build> 

</project> 

Это настроит атрибут пути к классам в манифесте файл, который ожидает, что все зависимости jar-библиотек в подкаталоге lib/ вашей главной банки. Вам необходимо скопировать эти библиотеки вручную в каталог lib.

Чтобы распространить ваше приложение со всеми зависимыми библиотеками, используя maven, вы можете использовать maven assembly plugin.

Надеюсь, это поможет!

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