Подтвердить что ты не робот

Использование Maven для построения С++ в eclipse

Мой проект состоит из нескольких Java-проектов, одного проекта Java-JNI-С++ как моста и одного чистого проекта С++, поддерживающего библиотеку алгоритмов. Мне удалось написать конфигурацию Maven для всех трех видов проектов. Поэтому, когда я вызываю их в командной строке (Windows 7, 64 бит), все работает отлично.

Я не использую никаких файлов make или что-то вроде этого. Я использую exec-maven-plugin для вызова моей 64-битной установки без cygwin (и я также, по крайней мере, не сознательно установил msys). Итак, 2 команды командной строки g++ для каждого проекта JNA и библиотеки.

Теперь мне нужен гладкий рабочий процесс разработки, чтобы иметь возможность создавать и отлаживать эти проекты из Eclipse, но используя скрипты сборки maven, поскольку я не хочу помещать работу в своих попов и дополнительно настраивать eclipse строитель. Это должно быть последовательным! Кроме того, если разбор ошибок в Eclipse будет соответствовать представлению сборки maven.

Для моих проектов Java это очень полезно. Eclipse собирает конфигурацию maven, а CLEAN и BUILD производят именно то, что должны. (Хотя я вижу, что Java Builder все еще активен в свойствах проекта. Почему?). Но я не могу заставить его работать с CDT.

Когда я отключу С++ Builder, Eclipse просто строит с помощью maven (что мне нужно), но чистые команды работают некорректно. Также я получаю отмеченные ошибки, которые не являются компилятором. Конечно, это должно быть последовательным.

Есть ли учебники для этого случая использования?

Я не нашел информации по этому вопросу. Я не уверен, что я вообще ошибаюсь в том, что вам не хватает лучших практик или что-то в этом роде?

Так как это мой первый s.o. вопрос, пожалуйста, не стесняйтесь дать мне также отзывы по моему вопросу. Что я могу предоставить, я буду; -)

Некоторая информация:

Система Windows 7, 64bit

Eclipse Juno, m2e

Библиотека POM:

<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>test</groupId>
  <artifactId>mylib</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>MyLib</name>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <versionRange>[1.1.1,)</versionRange>
                    <goals>
                      <goal>exec</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <execute>
                      <runOnIncremental>true</runOnIncremental>
                    </execute>
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.1.1</version>
        <executions>
          <execution>
            <id>compile-Windows_x64</id>
            <phase>compile</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>g++</executable>
              <workingDirectory>target/cpp/Windows_x64</workingDirectory>
              <arguments>
                <argument>-Wall</argument>
                <argument>-m64</argument>
                <argument>-c</argument>
                <argument>-DAPI_EXPORT</argument>
                <argument>-g3</argument>
                <argument>-std=c++0x</argument>
                <argument>../../../src/main/cpp/*.cpp</argument>
              </arguments>
            </configuration>
          </execution>
          <execution>
            <id>link-Windows_x64</id>
            <phase>compile</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>g++</executable>
              <workingDirectory>target</workingDirectory>
              <arguments>
                <argument>-shared</argument>
                <argument>-s</argument>
                <argument>-m64</argument>
                <argument>-oMyLib_Windows_x64.dll</argument>
                <argument>cpp/Windows_x64/*.o</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/assembly.xml</descriptor>
          </descriptors>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <executions>
          <execution>
            <id>default-testCompile</id>
            <phase>none</phase>
          </execution>
          <execution>
            <id>default-compile</id>
            <phase>none</phase>
          </execution>
        </executions>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.2</version>
        <executions>
          <execution>
            <id>default-jar</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.10</version>
        <executions>
          <execution>
            <id>default-test</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.5</version>
        <executions>
          <execution>
            <id>default-resources</id>
            <phase>none</phase>
          </execution>
          <execution>
            <id>default-testResources</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.3.1</version>
        <executions>
          <execution>
            <id>default-install</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.7</version>
        <executions>
          <execution>
            <id>default-deploy</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.0</version>
        <executions>
          <execution>
            <id>default-site</id>
            <phase>none</phase>
          </execution>
          <execution>
            <id>default-deploy</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

JNI POM:

<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>test</groupId>
  <artifactId>myprog</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>MyProg</name>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>truezip-maven-plugin</artifactId>
                    <versionRange>[1.1,)</versionRange>
                    <goals>
                      <goal>copy</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <execute>
                      <runOnIncremental>true</runOnIncremental>
                    </execute>
                  </action>
                </pluginExecution>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <versionRange>[1.1.1,)</versionRange>
                    <goals>
                      <goal>exec</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <execute>
                      <runOnIncremental>true</runOnIncremental>
                    </execute>
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>truezip-maven-plugin</artifactId>
        <version>1.1</version>
        <executions>
          <execution>
            <id>get-library-headers</id>
            <goals>
              <goal>copy</goal>
            </goals>
            <phase>generate-sources</phase>
            <configuration>
              <fileset>
                <directory>../MyLib/target/mylib-0.0.1-SNAPSHOT-dll.zip</directory>
                <includes>
                  <include>headers/*</include>
                </includes>
                <outputDirectory>${project.build.directory}/myLib</outputDirectory>
              </fileset>
            </configuration>
          </execution>
          <execution>
            <id>get-library</id>
            <goals>
              <goal>copy</goal>
            </goals>
            <phase>generate-resources</phase>
            <configuration>
              <fileset>
                <directory>../MyLib/target/mylib-0.0.1-SNAPSHOT-dll.zip</directory>
                <includes>
                  <include>*.dll</include>
                </includes>
                <outputDirectory>${project.build.directory}</outputDirectory>
              </fileset>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.1.1</version>
        <executions>
          <execution>
            <id>compile-Windows_x64</id>
            <phase>compile</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>g++</executable>
              <workingDirectory>target/cpp/Windows_x64</workingDirectory>
              <arguments>
                <argument>-Wall</argument>
                <argument>-m64</argument>
                <argument>-c</argument>
                <argument>-g3</argument>
                <argument>-std=c++0x</argument>
                <argument>-I../../myLib/headers</argument>
                <argument>../../../src/main/cpp/*.cpp</argument>
              </arguments>
            </configuration>
          </execution>
          <execution>
            <id>link-Windows_x64</id>
            <phase>compile</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>g++</executable>
              <workingDirectory>target</workingDirectory>
              <arguments>
                <argument>-m64</argument>
                <argument>-s</argument>
                <argument>-oMyProg_Windows_x64.exe</argument>
                <argument>cpp/Windows_x64/*.o</argument>
                <argument>MyLib_Windows_x64.dll</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <executions>
          <execution>
            <id>default-testCompile</id>
            <phase>none</phase>
          </execution>
          <execution>
            <id>default-compile</id>
            <phase>none</phase>
          </execution>
        </executions>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.3.2</version>
        <executions>
          <execution>
            <id>default-jar</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.10</version>
        <executions>
          <execution>
            <id>default-test</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.5</version>
        <executions>
          <execution>
            <id>default-resources</id>
            <phase>none</phase>
          </execution>
          <execution>
            <id>default-testResources</id>
            <phase>none</phase>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

Thankx

4b9b3361

Ответ 1

Eclipse делает не использование сборки Maven. Вместо этого он настраивает JDT в соответствии с вашим POM. Это делается через разъем M2E (Maven для Eclipse). Если вы хотите, чтобы то же самое работало для CDT, для этого вам понадобится разъем M2E. Я не знаю о существующем, поэтому для этого вам нужно будет написать плагин Eclipse. Подробнее о том, как это сделать, см. http://wiki.eclipse.org/M2E/Extension_Development.

Конечно, вы также можете использовать "execute" вместо "ignore" в вашем жизненном цикле. Сопоставление в pom. Но это, вероятно, приведет к довольно медленной сборке, потому что вся сборка будет срабатывать при каждом изменении. И все же это не "волшебным образом" приведет к ошибкам Maven в ваших файлах.