4

私のMavenビルドが現在のPOM設定でターゲット/クラスを生成しない理由がわかりません。私の場合はパッケージタイプがpomでなければなりません。何が間違っているかアドバイス...ありがとう!mavenコンパイルが「pom」パッケージタイプで動作しない理由

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<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/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.abc.sm.doctor</groupId> 
<artifactId>smdoctor</artifactId> 
<packaging>pom</packaging> 
<version>${SMDOCTOR_VERSION}</version> 
<name>sm doctor</name> 
<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
</properties> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.5</source> 
       <target>1.5</target> 
       <debug>true</debug> 
       <debuglevel>source,lines</debuglevel> 
       <showDeprecation>true</showDeprecation> 
       <archive> 
       </archive> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <appendAssemblyId>false</appendAssemblyId>   
       <finalName>smdoctor</finalName> 
       <descriptors> 
        <descriptor>dist.xml</descriptor> 
        <descriptor>zip.xml</descriptor> 
       </descriptors> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
     <id>attach-artifacts</id> 
     <phase>package</phase> 
     <goals> 
      <goal>attach-artifact</goal> 
     </goals> 
     <configuration> 
      <artifacts> 
      <artifact> 
       <file>target/smdoctor.zip</file> 
       <type>zip</type> 
      </artifact> 
      </artifacts> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>lib/</classpathPrefix> 
         <mainClass>...</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <version>2.3.1</version> 
     </plugin> 
    </plugins> 
</build> 
<dependencies> 
    ... 
    </dependencies> 

答えて

7

パッケージタイプをpomに設定すると、何もコンパイルする必要がないことを指定します。おそらくpomはこのアーティファクトの正しいパッケージングタイプではないでしょうか?あなたのスクリプトはjarとして正常に動作するようです。

+0

あなたは正しいです、梱包タイプとして瓶に問題はありませんが、何とか私はポンを使用する必要があります。 – Even

+5

これはMavenで間違ったことをしているように思えます。なぜなら、パッケージ化が必要な場合は、通常はルートにマルチモジュールビルドがありますが、ルートにはjarファイルが生成されないということです。あなたが梱包タイプの瓶を使用するよりも、瓶を作成する必要がある場合... – khmarbaise

5

コンパイラプラグインは、パッケージングポンポンとMavenのライフサイクルのあらゆる段階にバインドされていません。あなたはassembyプラグインのために行ったようexecutionを設定する必要があります:

<executions> 
    <execution> 
     <id>compile</id> 
     <phase>compile</phase> 
     <goals> 
      <goal>compile</goal> 
     </goals> 
    </execution> 
</executions> 

あなたのソースがSRC /メイン/ javaの以外のフォルダにある場合は、あなたのポンポンのビルドセクションでこのフォルダを設定する必要があります:

<build> 
    <sourceDirectory>${basedir}/path/to/sources</sourceDirectory> 
    <!-- plugins and other configuration --> 
</build> 
+0

まだまだ運がありません、[INFO] [コンパイラ:コンパイル{実行:コンパイル}] [情報]コンパイルするソースがありません。コンパイルします?? – Even

+0

あなたのソースは 'src/main/java'にありますか? 'build'の下にある' sourceDirectory'要素を正しいディレクトリに設定する必要があります。 –

+0

ありがとう!問題解決〜 – Even

0

pomパッケージ化は、他のモジュールがプラグイン、依存関係、コントリビュータ、開発者などの一般的な構成を継承するようにしています。検証段階を超えて進まないことを覚えておいてください。

このパッケージは論理的で実際のものではないため、実際のコードやリソースをそのレベルに配置しないでください。 5つのpomファイルで依存関係を定義するのではなく、5つの子モジュールでjunitを使用する場合は、pomパッケージで親pomで行うことができます。また、モジュールの特定のバージョンを指定することもできます親のpomに親pomを実行すると、pomの実行は親から子へと始まり、すべての依存関係が上から下に検索されます。

これは私がpomパッケージを理解する方法です。したがって、もしあなたがそのようなパッケージを持つコードを持っているなら、これはあなたのmavenプロジェクト構造が修正を必要とすることを意味します。複数のモジュール間の共通の構成としてのみパッケージングを使用してください

関連する問題