2015-08-26 1 views
0

В моем проекте maven у меня есть 1 главный и 2 модуля. Он только компилируется и запускается, когда я добавляю два модуля в зависимости от основного pom.xml, иначе я получаю ошибки компиляции, которые не отображаются в библиотеке отражений и т. Д.Maven родители и дети в Intellij

Как я могу это решить?

powercontrol.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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>nl.nberlijn.powercontrol</groupId> 
    <artifactId>powercontrol</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0</version> 
    <modules> 
     <module>log</module> 
     <module>kernel</module> 
    </modules> 
    <dependencies> 
     <dependency> 
      <groupId>nl.nberlijn.powercontrol</groupId> 
      <artifactId>kernel</artifactId> 
      <version>1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>nl.nberlijn.powercontrol</groupId> 
      <artifactId>log</artifactId> 
      <version>1.0</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.3</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

kernel.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 
    <parent> 
     <groupId>nl.nberlijn.powercontrol</groupId> 
     <artifactId>powercontrol</artifactId> 
     <version>1.0</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>kernel</artifactId> 
    <packaging>jar</packaging> 
    <dependencies> 
     <dependency> 
      <groupId>org.reflections</groupId> 
      <artifactId>reflections</artifactId> 
      <version>0.9.10</version> 
     </dependency> 
     <dependency> 
      <groupId>com.jcraft</groupId> 
      <artifactId>jsch</artifactId> 
      <version>0.1.53</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.3</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

log.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 
    <parent> 
     <groupId>nl.nberlijn.powercontrol</groupId> 
     <artifactId>powercontrol</artifactId> 
     <version>1.0</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>log</artifactId> 
    <packaging>jar</packaging> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.3</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

ответ

0

Без более Detai ls на коде внутри каждого из ваших модулей, трудно сказать, почему это так. Однако, разместив ваши два модуля в качестве зависимостей в родительском POM, они и их транзитивные зависимости будут наследоваться обоими дочерними модулями.

Я думаю, вы должны решить эту проблему, удалив зависимости от родительского POM и добавив зависимость от вашего log POM, чтобы зависеть от вашего модуля kernel.

+0

Может быть проблема, что в основном (родительском) у меня есть также код Java? Должен ли я создать новый модуль для кода (основного/приложения)? Я просто читаю и угадываю! – nberlijn

+2

Ваша 'упаковка' для вашего родительского модуля -' pom'. Это означает, что он не будет создавать банку из вашего родительского модуля, только для ваших дочерних модулей. Так что да, любой Java-код должен быть включен в один из ваших дочерних модулей (или новый, если требуется) – olambert

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