Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ビルド方法の文書化 #331

Closed
nokok opened this issue Apr 1, 2016 · 16 comments
Closed

ビルド方法の文書化 #331

nokok opened this issue Apr 1, 2016 · 16 comments

Comments

@nokok
Copy link
Contributor

nokok commented Apr 1, 2016

現状、knowledge(このリポジトリ)単体でビルドできず、
エラーメッセージ等から依存ライブラリを引っ張ってきて、mvn installして...という感じで作業が発生しています。

これでは、コントリビュートしたい!と思っている人のモチベーションを下げてしまうような気がします。
(実際、おっと...となりました)

knowledge単体でビルド出来ないのは未解決の既知の問題でしょうか?
それとも現状の仕様でしょうか?
そもそもシンプルな別の方法があったりしますか?

とりあえずmvnやbower等必要なものが揃ってる前提で、
コードを落としてきて動くwarを作るのに次のような作業が必要でした。

#!/bin/bash

git clone [email protected]:support-project/knowledge.git
git clone [email protected]:support-project/markedj.git
git clone [email protected]:support-project/web.git
git clone [email protected]:support-project/common.git

cd web
mvn install
cd ../common
mvn install
cd ../markedj
mvn install
cd ../knowledge
bower install
mvn install package

リソース等を考えると優先度が高くないのかもですが、仕様であれば文書化が必要だと思います。
もし必要であればぜひ協力したいです。 :)

@nokok
Copy link
Contributor Author

nokok commented Apr 1, 2016

ちなみにですが、

現状、knowledge(このリポジトリ)単体でビルドできず、
エラーメッセージ等から依存ライブラリを引っ張ってきて、mvn installして...という感じで作業が発生しています。

エラーメッセージは次のようなものが出ます。

> mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building webapp for knowledge 1.2.1
[INFO] ------------------------------------------------------------------------
Downloading: https://support-project.org/nexus/content/repositories/public/org/support-project/web/1.2.0/web-1.2.0.pom
Downloading: https://repo.maven.apache.org/maven2/org/support-project/web/1.2.0/web-1.2.0.pom
Downloading: https://support-project.org/nexus/content/repositories/public/org/support-project/markedj/1.0.7-SNAPSHOT/maven-metadata.xml
[WARNING] Could not transfer metadata org.support-project:markedj:1.0.7-SNAPSHOT/maven-metadata.xml from/to private (https://support-project.org/nexus/content/repositories/public/): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[WARNING] Failure to transfer org.support-project:markedj:1.0.7-SNAPSHOT/maven-metadata.xml from https://support-project.org/nexus/content/repositories/public/ was cached in the local repository, resolution will not be reattempted until the update interval of private has elapsed or updates are forced. Original error: Could not transfer metadata org.support-project:markedj:1.0.7-SNAPSHOT/maven-metadata.xml from/to private (https://support-project.org/nexus/content/repositories/public/): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Downloading: https://support-project.org/nexus/content/repositories/public/org/support-project/markedj/1.0.7-SNAPSHOT/markedj-1.0.7-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.280 s
[INFO] Finished at: 2016-04-02T00:29:05+09:00
[INFO] Final Memory: 12M/136M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project knowledge: Could not resolve dependencies for project org.support-project:knowledge:war:1.2.1: Failed to collect dependencies at org.support-project:web:jar:1.2.0: Failed to read artifact descriptor for org.support-project:web:jar:1.2.0: Could not transfer artifact org.support-project:web:pom:1.2.0 from/to private (https://support-project.org/nexus/content/repositories/public/): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

@koda-masaru
Copy link
Contributor

上記については既知の問題です。対応を検討します。

原因

Knowledgeをcloneして、「mvn package」だけでビルドできない原因は、ドメインの証明書になります。
今年の1月に、ドメイン(support-project.org)の証明書を、有料のものから、無料のLet's Encryptに変更したのですが、そのせいでJavaではSSL証明書エラーになるようになりました。(主要なWebブラウザでは問題無いのに。。。)
このため、依存ライブラリをsupport-project.orgの中で、Mavenリポジトリに置いているために、それをダウンロードしてくれないという問題が発生しています。

「今の状態で」ビルドするためには(シンプルな別の方法)

解決する手段としては、 @nokok さんの実施したように、各依存ライブラリをローカルでビルドするという手もありますが、もっと簡単な方法としてドメインの証明書をJavaのキーストアにインポートするという方法があります。

ブラウザ(私はFirefoxで実行しました)で、support-project.orgの証明書を書き出して、それをJavaのキーストアにインポートします。
Macでのインポートは以下のコマンドで実行しました。

sudo keytool -alias {インポートする証明書に名前をつける} -import -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk1.8.X_XX.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -file {証明書}

今後の対策案

↑のように、support-project.orgの証明書をjavaのkeytoolでインポートするのは手間なので、対策を検討します。方法としては、、、

SSL証明書を有料(Javaでも信頼されている)のものに変える

  • 個人で運営しているので、費用はできるだけ避けたいですが、、、、

依存ライブラリのMavenリポジトリの置き場所を変える

  • 信頼済のリポジトリに、依存するjarを置けば解決です
  • OSSのjarを自由におけるリポジトリを知りませんか?(OSSで公開するのは、Knowledgeが初めてで知識が無いのですが、、、)

無料のLet's EncryptのSSL証明書でもJavaがエラーにならないようにアップデートされるのを待つ

  • Oracleさんが対応してくれれば、何もしないでもOK!
  • 主要なWebブラウザではエラーにならないので、対応されるかな?と待っていたのですが、無理っぽいですね、、、、、

2番めの案が現実的かな。

@yatszhash
Copy link

もう一つjavascript関連のライブラリを導入する際、自分の環境だとbower等を手動でインストールし、コマンドをたたかなければなりませんでした。

出来れば、mvn packageだけでそこまでできるとありがたいです。
mavenでできるかはわからないのですが・・・。(gradleだとできますね。)

自分でも調べてみます。

@nokok
Copy link
Contributor Author

nokok commented Apr 2, 2016

もっと簡単な方法としてドメインの証明書をJavaのキーストアにインポートするという方法があります。

ありがとうございます!これでビルドできました!

依存ライブラリのMavenリポジトリの置き場所を変える
信頼済のリポジトリに、依存するjarを置けば解決です
OSSのjarを自由におけるリポジトリを知りませんか?(OSSで公開するのは、Knowledgeが初めてで知識が無いのですが、、、)

依存ライブラリ群をMavenのCentral Repositoryに登録してしまうのはいかがでしょうか?(自分もやったことないことをお勧めするのも申し訳ありませんが...)

それまでの一時的な措置としてCONTRIBUTING.mdか何かに鍵をインポートする方法、ローカルで全部ビルドする方法を記述する形にするのが良いのかなと思います。

自分もいろいろ調べてみますね。

@koda-masaru
Copy link
Contributor

@nokok さん

依存ライブラリ群をMavenのCentral Repositoryに登録してしまうのはいかがでしょうか?

私もそう思ったので、Central Repositoryの利用者登録を行いました。
少し大変だったのですが、、、 無事にリポジトリの移動ができたと思います。( #332

develop ブランチに反映済なので、そのブランチを取得してもらうと、↑のkeytoolでのインポートは
必要なくなると思います。

@koda-masaru
Copy link
Contributor

@yatszhash さん

たしかに、bowerもMavenから取得できると楽ですね。
私もちょっと調べてみます。

@nokok
Copy link
Contributor Author

nokok commented Apr 3, 2016

@koda-masaru さん
ありがとうございます。作業お疲れ様でした。
先ほど確認したのですが、ローカルのキャッシュを削除してもビルド出来ていますか?

私のローカルの方ではエラーが発生してしまいました。
ローカルのMaven
https://gist.github.com/nokok/c30c9bb583720e8d64b62f492864b279

Travisでは同じような所でwarningが発生していました。
Travis
https://travis-ci.org/support-project/knowledge/builds/120322611#L1561 近辺

調べたら、まだMaven Central Repositoryには上がっていないようです。
http://repo1.maven.org/maven2/org/http://repo1.maven.apache.org/maven2/org/ にsupport-projectディレクトリが無い(22:32時点)ことから、まだ公開されていないものと思われます。

Travisでwarningが出ているもののビルドできているのが謎です...

@koda-masaru
Copy link
Contributor

@nokok さん

ご連絡ありがとうございます。
ご指摘のように、キャッシュを削除するとダウンロードエラーになりました。
CIでSuccessになっていたので、大丈夫かと思っていました。
ほんと、なんでビルドできているのか、謎ですね。。。

Maven Central Repository に同期される、oss.sonatype.orgのリポジトリには、登録できたので
勝手に同期されると思っていたのですが、そこから更に「リリースの作業」が必要なようです。
参考:http://samuraism.jp/diary/2012/05/03/1336047480000.html

ただ、↑のURLの手順でリリースしようとしても、
「Build PromotionのStaging Repositoriesをクリック、自分のartifactを選択してClose→publishします。」に書かれる、自分のartifactを選択のメニューが出てきません。(SNAPSHOTだと出てこない?)

仕方が無いので、SNAPSHOTの場合は、Sonatype OSS Snapshot Repository( http://oss.sonatype.org/content/repositories/snapshots )を参照するように設定を追加しました。
07029c8

こうすることで、いったんdevelopブランチの最新では、エラー無くビルドが通るようになりました。

Maven Central Repository への同期の方法は、もうちょっと調べてみます。

@koda-masaru
Copy link
Contributor

ちなみに、先ほどのリポジトリ参照の追加を行っても、CIでは警告が出ています。

https://travis-ci.org/support-project/knowledge/builds/120441918
の1576行目

CIとローカルビルドでは、何か仕組みが違うのかもしれませんね。

@koda-masaru
Copy link
Contributor

@yatszhash さん

Mavenで、bower 等のツールをインストールして、 bower install を実行する方法として以下のURLを見つけました。
https://github.com/eirslett/frontend-maven-plugin

ただ、ローカルに既にnode.jsやbowerがインストールされていた場合など、よくわからないところも多いので、いろいろ調べてから反映しようと思います。

@koda-masaru
Copy link
Contributor

自分のartifactを選択のメニューが出てきません。(SNAPSHOTだと出てこない?)

バージョンからSNAPSHOTを解除したところ、自分のartifactを選択出来るようになりました。
これで、Maven Central Repositoryに同期できる処理を進められる!と思ったのですが、
Maven Central Repositoryに同期させるためには、Javadocがきちんと全て書かれている事が
条件のようです。

  • Event: 1 rule failed: Central Sync Requirement
    • Event: Failed: Javadoc Validation

依存ライブラリのJavadocを全て整備しないといけないので、Maven Central Repositoryへの
登録は少し時間がかかりそうです。

@nokok
Copy link
Contributor Author

nokok commented Apr 7, 2016

@koda-masaru
諸々ご対応ありがとうございます。こちらでもビルドができました。

依存ライブラリのJavadocを全て整備しないといけないので、Maven Central Repositoryへの
登録は少し時間がかかりそうです。

これはなかなか時間がかかりそうですね。。。ちなみにですがJavadocへのPullRequestは受け付けてたりしますか?

@koda-masaru koda-masaru modified the milestones: v1.4, v1.3 Apr 7, 2016
@koda-masaru
Copy link
Contributor

PullRequestは、どんなものでも受け付けています。

今、「とりあえずMaven Central Repositoryに登録できればいいやー」という気持ちで
Javadocを一気に書いています。(commonはエラーが出ないところまで対応済)
そんなわけで、記載のレベルはかなり低いので、もしPullRequestを送っていただけるので
あれば助かります。(自分のチームで使いたいものを簡単に作ったので、Javadocとかの
整備は二の次でした。。。。)

あと、Mavenに登録する場合、できればJavadocは英語が望ましいそうです。。。。
既存のJavadocは日本語のところもありますし、英語化もなんとかしたいので、協力していただけると嬉しいです。

@nokok
Copy link
Contributor Author

nokok commented Apr 8, 2016

了解しました。

できるところから(多分webとかですかね)協力します。
ビルドが出来ない問題はクリアできたので、一旦このチケットはクローズします。

ご対応ありがとうございました。引続きよろしくお願いします。

@nokok nokok closed this as completed Apr 8, 2016
@koda-masaru
Copy link
Contributor

ご協力感謝です。
今、webのモジュールもかなりコメントを書いたので、修正はしばらくお待ち下さい。
(コンクリフトするので)

それがマージされてから、英語化などで協力いただけると嬉しいです。

@nokok
Copy link
Contributor Author

nokok commented Apr 9, 2016

👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants