glycoinfo / GlycanBuilder2

7 stars 5 forks source link

Fat-jar was deployed in MavenRepository #47

Closed e15d5605 closed 2 years ago

e15d5605 commented 2 years ago

GlycanBuilder2は実行可能jarファイルを生成するためにmaven-assembly-pluginを導入している。\ そのため、mvn deployの実行時にfat-jarの生成も行われ、MavenRepositoryへデプロイされてしまっている。\ fat-jarは非常に大きなサイズのファイルであることや、ライブラリとしての参照に必要な形式でないためデプロイを避ける必要がある。

image
e15d5605 commented 2 years ago

maven-assembly-pluginはGlycanBuilder2の実行可能jarファイルの生成に必要なプラグインであり、maven packageを実行した際に参照される。このコマンドを実行するとデフォルトで組み込まれているmaven-jar-pluginmaven-assembly-pluginが参照され、ライブラリ用のjarとfat-jarを生成する。このコマンドはmvn deployを実行した際にも行われているためfat-jarも同時にデプロイされている。maven-assembly-pluginにdeploy時は参照しない旨のプロパティがあるのかを調査したが、それらしい機能は提供されていなさそうであった。代替案として以下の運用方法を検討した。

  1. mvn packagemvn deployではデフォルトで利用可能なmaven-jar-pluginのみを利用する
  2. fat-jarを生成する場合は、専用の変数を追記して実行する

専用の変数としてfat-jarを生成するための<profile>を追加した。厳密には<build>に組み込まれていたmaven-assembly-pluginを移動しただけである。

<profile>
  <id>make-fat-jar</id>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-assembly-plugin</artifactId>
     <version>3.0.0</version>
     <configuration>
       <finalName>glycanbuilder2</finalName>
       <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
       </descriptorRefs>
       <archive>
         <manifest>
        <mainClass>org.eurocarbdb.application.glycanbuilder.GlycanBuilder</mainClass>
         </manifest>
         <manifestEntries>
           <Class-Path>../config/</Class-Path>
         </manifestEntries>
       </archive>
       <attach>false</attach>
     </configuration>
     <executions>
       <execution>
         <id>make-assembly</id>
         <phase>package</phase>
         <goals>
           <goal>single</goal>
         </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</profile>

また、fat-jarとは別にmaven-source-pluginというプラグインも導入されている。これはeclipseで.projectファイルを作成した際に、ライブラリに対してソースコードを添付するためのアーカイブファイルである。開発に必要不可欠なファイルではないが、参照しているライブラリのソースコードを見ることが可能になるため、問題の解決方法を模索する際に役立てられる。現在はmvn packageを実行するとjarファイルと一緒に生成されてしまうため、<profile>として扱うことで必要な時に呼び出すようにした。

<profile>
  <id>make-source-jar</id>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-sources</id>
         <phase>package</phase>
         <goals>
           <goal>jar-no-fork</goal>
         </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</profile>
これらの構成により以下の使い分けが可能になる。 Command 成果物
mvn package glycanbuilder2-1.17.1.jar
mvn -P make-fat-jar package glycanbuilder2-1.17.1.jar
glycanbuilder2-1.17.1-with-dependencies.jar
mvn deploy glycanbuilder2-1.17.1.jar
mvn -P make-source-jar deply glycanbuilder2-1.17.1.jar
glycanbuilder2-1.17.1-sources.jar
e15d5605 commented 2 years ago

v1.17.1〜より導入する