2

プロジェクトをコンパイルしてjarとしてパッケージ化するためにpom.xmlを作成しましたが、実際にコンパイルしてjarが作成されました-問題は、クラスとjavaの両方を含むjarを取得したことです。

Java ファイルを失うにはどうすればよいですか? 私はそれらを必要としません。

これは私が作成したpom.xmlです:

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <finalName>api-interfaces</finalName>
        <plugins>
        <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>make-a-jar</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            <configuration>
          <excludes>
            <exclude>*.properties</exclude>
              <exclude>*.xml</exclude>
               <exclude>sql/**</exclude>
                <exclude>META-INF/**</exclude>
                 <exclude>*.jar</exclude>
                  <exclude>*.java</exclude>
                   <exclude>default-configs/**</exclude>

          </excludes>
          </configuration>
        </plugin>
       </plugins>
    </build>

これは私が得る瓶です

4

2 に答える 2

6

これが犯人です:

    <resources>
        <resource>
            <directory>src/main/java</directory>
            <filtering>true</filtering>
        </resource>
    </resources>

src/main/javaこれにより、 内のファイル、つまり.javaファイルを jar に含める必要があることを明示的に指定します。

標準のMavenレイアウトを使用してリソースをに配置するか、これを使用してファイルをsrc/main/resources明示的に除外できます。.java

    <resources>
        <resource>
            <directory>src/main/java</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
    </resources>

詳細、特にinclude/exclude の例については、 maven リソース プラグインを参照してください。

于 2014-09-28T13:21:50.350 に答える
2

maven-jar-plugin:jar目標をcompile明示的にフェーズにバインドする正当な理由はありますか? コンパイル フェーズは、「プロジェクトのソース コードをコンパイルする」ことを目的としています。

jarパッケージ化プロジェクトでは、目標はデフォルトで「コンパイルされたコードを取得し、JAR などの配布可能な形式でパッケージ化する」jar:jarフェーズにバインドされています。package

resources:resouces目標は、「リソースを宛先ディレクトリにコピーして処理し、パッケージ化の準備を整える」フェーズにバインドされていますprocess-resources

デフォルトの目標をデフォルト以外のフェーズにバインドすることは、Maven を使用するというよりも、Maven に対して作業することに似ています。

@SillyFreak の回答で言及されているように使用src/main/resourcesすることで、POM でこのビルドステップの定義をまったく必要としない可能性があります。

于 2014-09-28T13:05:40.163 に答える