2016-06-01 39 views
1

Mavenのビルドプロセスを再構築して、すべてのプロジェクトで共通のプロジェクトを共有するという問題に対処していますが、うまく機能しません。一般的なプロジェクトをMavenと共有する

ここまでに、合計30個のlibsを使用する5つのGUI(RCP E4 with JavaFX)があります。それらは部分的に我々のもの(ソースコード)と第三者(jarファイル)です。すべてのGUIには、独自のMavenビルドプロセスがあります。すべてのGUIには、コンパイルに必要なすべてのlibのコピーを持つ独自のGitがあります。

enter image description here

は今、私はこれらのプロジェクトでは、冗長性を取り除きたい:依存関係は(少数のGUIといくつかの一般的なLIBS)のように見てどのようにあなたのアイデアを与えるために。私が言ったように、すべてのGUIには、必要な共通プロジェクトの独自のGitとそれ自身のコピー(!)があります。私はすでにそれらを分離する共通ライブラリのためのGitを作成しました。今私の問題が来る。今までのこれらの共通プロジェクトには、それぞれ自分で親を指定する必要がある pom.xmlがありました。ここでは例 pom.xml次のとおりです。

[INFO] Scanning for projects... 
[ERROR] Internal error: java.lang.RuntimeException: Could not resolve target platform specification artifact gui.a:gui.a.app.target:target:1.0.0-SNAPSHOT -> [Help 1] 
org.apache.maven.InternalErrorException: Internal error: java.lang.RuntimeException: Could not resolve target platform specification artifact gui.a:gui.a.app.target:target:1.0.0-SNAPSHOT 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:168) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
Caused by: java.lang.RuntimeException: Could not resolve target platform specification artifact gui.a:gui.a.app.target:target:1.0.0-SNAPSHOT 
    at org.eclipse.tycho.core.resolver.DefaultTargetPlatformConfigurationReader.addTargetArtifact(DefaultTargetPlatformConfigurationReader.java:389) 
    at org.eclipse.tycho.core.resolver.DefaultTargetPlatformConfigurationReader.setTarget(DefaultTargetPlatformConfigurationReader.java:342) 
    at org.eclipse.tycho.core.resolver.DefaultTargetPlatformConfigurationReader.getTargetPlatformConfiguration(DefaultTargetPlatformConfigurationReader.java:75) 
    at org.eclipse.tycho.core.resolver.DefaultTychoResolver.setupProject(DefaultTychoResolver.java:86) 
    at org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.afterProjectsRead(TychoMavenLifecycleParticipant.java:90) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:274) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    ... 11 more 
[ERROR] 

事実から、このエラーの結果、Mavenのが見つけようとしていること:

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
     <groupId>gui.a.e4</groupId> 
     <artifactId>gui.a.e4.app.releng</artifactId> 
     <relativePath>../gui.a.e4.app.releng/pom.xml</relativePath> 
     <version>1.0.0-SNAPSHOT</version> 
    </parent> 
    <groupId>gui.a.e4</groupId> 
    <artifactId>common.project.x</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>eclipse-plugin</packaging> 
</project> 

最初に私はちょうど次のようなエラーが生じたgui.b.e4common.project.xを含めることを試みました親であるcommon.project.xとそれを解決しようとします。この場合、親の親はターゲットプラットフォーム(いくつかのRCP E4固有のもの)を作成する必要があります。この問題を解決する私の最初の試みは、親をpom.xmlから削除することでした。私はcommon.project.xで親を指定していないときにgui.a.e4のビルドはそれを文句:

[INFO] Scanning for projects... 
[ERROR] The build could not read 1 project -> [Help 1] 
[ERROR] 
[ERROR] The project auv.e4:art.util.geo:1.0.0-SNAPSHOT (/home/mhoffmann/apps/workspace_rcp_gui/art.util.geo.bundle/pom.xml) has 1 error 
[ERROR]  Unknown packaging: eclipse-plugin @ line 8, column 14 
[ERROR] 

と私はその後pom他のプロジェクトへのパッケージの種類を変更した場合は、このプロジェクトを見つけることができません。

[ERROR] Cannot resolve project dependencies: 
[ERROR] Software being installed: gui.a.e4.application 1.0.0.qualifier 
[ERROR] Missing requirement: common.project.y 1.0.0.qualifier requires 'bundle common.project.x 0.0.0' but it could not be found 
[ERROR] Cannot satisfy dependency: gui.a.e4.application 1.0.0.qualifier depends on: bundle common.project.y 0.0.0 
[ERROR] 
ここで

が私たちのGUIのの1を構築するためのMavenのXMLで、それらはすべて

<?xml version="1.0" encoding="UTF-8"?> 
<project 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" 
     xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <modelVersion>4.0.0</modelVersion> 
     <name>gui.a - releng</name> 
     <prerequisites> 
       <maven>3.0</maven> 
     </prerequisites> 
     <groupId>gui.a</groupId> 
     <artifactId>gui.a.app.releng</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
     <packaging>pom</packaging> 
     <properties> 
       <tycho-version>0.23.1</tycho-version> 
       <junit-version>4.11</junit-version> 
       <mockito-version>1.8.4</mockito-version> 
       <platform-version>4.2</platform-version> 
       <efx-version>1.0.0</efx-version> 
       <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
       <show-eclipse-log>true</show-eclipse-log> 
     </properties> 
     <modules> 
       <module>../gui.a.app</module> 
       <module>../gui.a.app.feature</module> 
       <module>../gui.a.app.product</module> 
       <module>../gui.a.specific.project.a</module> 
       <module>../gui.a.specific.project.b</module> 
       <module>../common.project.a</module> 
       <module>../common.project.b</module> 
     </modules> 
       <pluginRepositories> 
       <pluginRepository> 
         <id>tycho</id> 
         <url>http://repository.sonatype.org/content/groups/sonatype-public-grid</url> 
         <snapshots> 
           <enabled>true</enabled> 
         </snapshots> 
       </pluginRepository> 
     </pluginRepositories> 
     <build> 
       <!-- build plugins --> 
       <plugins> 
         <plugin> 
           <groupId>org.eclipse.tycho</groupId> 
           <artifactId>tycho-maven-plugin</artifactId> 
           <version>${tycho-version}</version> 
           <extensions>true</extensions> 
         </plugin> 
         <plugin> 
           <groupId>org.eclipse.tycho</groupId> 
           <artifactId>target-platform-configuration</artifactId> 
           <version>${tycho-version}</version> 
           <configuration> 
             <target> 
               <artifact> 
                 <groupId>gui.a</groupId> 
                 <artifactId>gui.a.app.target</artifactId> 
                 <version>1.0.0-SNAPSHOT</version> 
               </artifact> 
             </target> 
             <resolver>p2</resolver> 

             <pomDependencies>consider</pomDependencies> 
             <environments> 
               <environment> 
                 <os>win32</os> 
                 <ws>win32</ws> 
                 <arch>x86</arch> 
               </environment> 
               <environment> 
                 <os>win32</os> 
                 <ws>win32</ws> 
                 <arch>x86_64</arch> 
               </environment> 
               <environment> 
                 <os>linux</os> 
                 <ws>gtk</ws> 
                 <arch>x86_64</arch> 
               </environment> 
               <environment> 
                <os>macosx</os> 
                <ws>cocoa</ws> 
                <arch>x86_64</arch> 
              </environment> 
             </environments> 
           </configuration> 
         </plugin> 
       </plugins> 
       <!-- defines the default settings for the used plugins --> 
       <pluginManagement> 
         <plugins> 
           <plugin> 
             <groupId>org.eclipse.tycho</groupId> 
             <artifactId>tycho-compiler-plugin</artifactId> 
             <version>${tycho-version}</version> 
             <configuration> 
               <encoding>UTF-8</encoding> 
               <source>1.8</source> 
               <target>1.8</target> 
               <extraClasspathElements> 
                 <extraClasspathElement> 
                   <groupId>javafx</groupId> 
                   <artifactId>javafx.mvn</artifactId> 
                   <version>2.2.0-SNAPSHOT</version> 
                 </extraClasspathElement> 
               </extraClasspathElements> 
             </configuration> 
           </plugin> 
           <plugin> 
             <groupId>org.eclipse.tycho</groupId> 
             <artifactId>tycho-source-plugin</artifactId> 
             <version>${tycho-version}</version> 
             <executions> 
               <execution> 
                 <id>plugin-source</id> 
                 <goals> 
                   <goal>plugin-source</goal> 
                 </goals> 
               </execution> 
             </executions> 
           </plugin> 
           <plugin> 
             <groupId>org.eclipse.tycho</groupId> 
             <artifactId>tycho-packaging-plugin</artifactId> 
             <version>${tycho-version}</version> 
             <configuration> 
               <archive> 
                 <addMavenDescriptor>false</addMavenDescriptor> 
               </archive> 
             </configuration> 
           </plugin> 
         </plugins> 
       </pluginManagement> 
     </build> 
     <dependencyManagement> 
       <dependencies> 
         <dependency> 
           <groupId>junit</groupId> 
           <artifactId>junit</artifactId> 
           <version>${junit-version}</version> 
           <scope>test</scope> 
         </dependency> 
       </dependencies> 
     </dependencyManagement> 
     <dependencies> 
       <dependency> 
         <groupId>org.mockito</groupId> 
         <artifactId>mockito-core</artifactId> 
         <version>${mockito-version}</version> 
       </dependency> 
       <dependency> 
         <groupId>junit</groupId> 
         <artifactId>junit</artifactId> 
         <scope>test</scope> 
       </dependency> 
     </dependencies> 
</project> 

(プロジェクトの名前を除いて)同じであるIもドン共通のプロジェクトのPOMがどのように見えるべきか、あるいは何をすべきかを知っていません。私はMavenについて多くの知識を持っていませんが、既存のスクリプトにさらに common.projectを組み込むだけで十分です:-)。これまでのところ、私はそれを機能させるために何を変えなければならないのか分かりません。私を助けてください、Mavenは私を夢中にさせます。 :-)

答えて

0

グラフの矢印は、階層構造(チャートの一番下にレベルがある)を示します。このことを、GUIのサブモジュール(<module>../common.project.a</module>)としてcommon.project.xを宣言することは、直感に反します。特に、2つのGUIが同じものを参照している場合は、common.project.x

私は、次のような構造をお勧めしたい:

+ main 
    +- pom.xml ... declarations common to all projects, common and gui as sub-modules 
    +- common 
    +- pom.xml ... declarations common to common.projects, common.projects as sub-modules 
    +- common.project.a 
     +- pom.xml 
    +- common.project.b 
     +- pom.xml ... including direct dependency to a 
    +- ... 
     +- ... 
    +- gui 
    +- pom.xml ... declarations common to GUI projects, GUI projects as sub-modules 
    +- GUI a 
     +- pom.xml ... including direct dependencies to b, c 
    +- GUI b 
     +- pom.xml ... including direct dependencies to b, c, e 
    +- ... 
     +- ... 

各プロジェクトは<parent>としてその直接の祖先を持っています。

推移依存性の省略:GUI a

  • a

    • aGUI b

    dも参照:

  • +0

    私はもちろん、すべてが非常にきれいになるだろうこれは、(達人で)これが可能だったことを知っていませんでした。しかし、pom.xmlはどのように見えますか、特にメインのpom.xmlです。私はGUI x pom.xmlのために、私はちょうどその親の権利として主なものを指定する必要があると思いますか?共通のプロジェクトでも同じことをしてください。 – Westranger

    +0

    @Westranger 'main' POMには、すべての子孫プロジェクト(および' 'および' 'セクション)によって継承されたすべての宣言が含まれている必要があります。あなたは間違っていた。 ;)すべての 'GUI x'プロジェクトは' gui'を親として持つべきです。 'common'と' gui'だけが 'main'を親として持っています。私は私の答えにいくつかの参照を追加するつもりです。 –

    +0

    今私はここで親の意味を誤解しているのを見ています。 GUIを構築するときにGUI bが存在しない場合はどうなりますか? GUIをビルドするとき、GUI bをチェックアウトしたくはありません.MavenがGUI bが存在しないというエラー(ちょうど推測)が出るようです。最後に、私はGUIと必要な一般的なプロジェクトをチェックアウトし、それを構築したいだけですが、これはあなたのソリューションでも使えますか? – Westranger

    関連する問題