2014-01-03 3 views
0

Я работаю над проектом, который содержит ряд подпроектов. Структура - это что-то вроде Project 1, Project 2 и ProjectClassLoader. Используя отдельные файлы конфигурации, я передаю двоичные имена классов из проектов 1 и 2, которые необходимо загружать каждый раз в качестве аргументов в проект ProjectClassLoader.Classloader с встроенным банком Maven

ProjectClassLoader получает дескриптор системного загрузчика классов

ClassLoader loader = ClassLoader.getSystemClassLoader(); 

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

Я использую Maven для создания проектов и обработки связанных зависимостей. Таким образом, каждый проект имеет свой собственный файл pom.xml. ProjectClassLoader определяет родительский pom.xml над проектами 1 и 2, которые наследуются от этого. Родительский pom содержит записи зависимостей для проектов 1 и 2.

Я понимаю, что любые зависимости, указанные в файлах pom.xml этих проектов, будут добавлены в путь к классам во время выполнения. Однако при попытке загрузить классы с помощью системного загрузчика классов я получаю класс не найденным execptions.

Я попытался использовать плагин mvn: exec, который, как я понимаю, включает в себя зависимости в пути к классам при выполнении баннеров в командной строке, но это не сработало.

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

+0

Вы установили | развернули | выпущены оба проекта Project1 и Project2, чтобы можно было разрешить зависимости. –

+0

Привет, Stefaan спасибо за ваш ответ ... Да, я установил | deployed | выпустил зависимости, чтобы они могли быть разрешены. Я пытаюсь использовать этот плагин http://mojo.codehaus.org/exec-maven-plugin/, который позволяет вам запускать основной метод с включенными зависимостями проекта maven. Однако, когда я распечатываю путь к классам, когда программа выполняет, никакая из зависимостей не загружается. – Barry

ответ

0

Вы можете проверить, если ваш ПОМ соответствует этой конфигурации немного?

<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"> 
    ... 
    <properties> 
     ... 
     <exec.maven.plugin.version>1.2.1</exec.maven.plugin.version> 
     ... 
    </properties> 

    <build> 
     <plugins> 
      ... 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>exec-maven-plugin</artifactId> 
      </plugin> 
      ... 
     </plugins> 

     <pluginManagement> 
      <plugins> 
       ... 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>exec-maven-plugin</artifactId> 
        <version>${exec.maven.plugin.version}</version> 
        <configuration> 
         <executable>java</executable> 
         <arguments> 
          <argument>-classpath</argument> 
          <!-- automatically creates the classpath using all project dependencies, also adding the project build directory --> 
          <classpath /> 
          <argument>com.example.Main</argument><!-- your mainClass --> 
         </arguments> 
        </configuration> 
       </plugin> 
       ... 
      </plugins> 
     </pluginManagement> 
    </build> 

    <dependencies> 
     ... 
     <dependency> 
      <groupId>groupId.for.project1</groupId> 
      <artifactId>project1</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>groupId.for.project2</groupId> 
      <artifactId>project2</artifactId> 
     </dependency> 
     ... 
    </dependencies> 

    <dependencyManagement> 
     <dependencies> 
      ... 
      <dependency> 
       <groupId>groupId.for.project1</groupId> 
       <artifactId>project1</artifactId> 
       <version>${project1.version}</version> 
      </dependency> 
      <dependency> 
       <groupId>groupId.for.project2</groupId> 
       <artifactId>project2</artifactId> 
       <version>${project2.version}</version> 
      </dependency> 
      ... 
     </dependencies> 
    </dependencyManagement> 
    ... 
</project> 

Где вы заполняете их соответствующими артефактами.

Затем вы должны быть в состоянии начать его с:

МВН Exec: EXEC

Вы можете оставить конфигурацию для ПОМ плз, если он не соответствует, таким образом это проще чтобы понять, что именно вы сейчас имеете в своем пом.

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